728x90
반응형
SMALL
728x90
반응형
LIST
728x90
반응형
SMALL
개발자라면, 개발 전 코딩 규칙에 대해서 들어봤을 것이다.
언어마다 각기 다른 코딩 규칙이 있다.
그렇지만 코딩 규칙을 지키지 않는다고 프로그램이 실행이 되지 않는 것은 아니다.
그렇지만 알고 안 쓰는 거랑 모르고 안 쓰는 거랑 다르기 때문에

Python에서는 어떤 코딩 규칙으로 코딩하는지 알아보도록 하자!

 

■ Python 코딩 규칙 리스트

No 설명 예제
1 들여쓰기는 4개의 공백을 사용한다.
공백을 잘못 사용하면 인터프리터가 잘못된 해석을 할 수 있다.
test = 0

if test == 0:
    print(test)  # 4개의 공백
2 최대 라인길이는 79자로 제한한다. (문서 문자열/주석은 72자)  
3 배포판의 코드는 항상 UTF-8(Python 2에서는 ASCII)를 사용한다.  
4 삼중 따옴표로 묶인 문자열의 경우 항상 큰따옴표를 사용한다. """주석입니다.
2번째 줄 주석입니다.
"""
5 키워드 인수 또는 매개변수 값에는 = 기호 주위에 공백을 사용하지 않는다. def sample_function(param=None):
    (생략)....
6 함수 및 메서드 호출 시 한 줄에 하나씩 사용한다. func()
func1()
func2()
7 import는 한 줄에 하나의 모듈을 import 한다. import os
import sys
8 하나의 철자를 가진 변수명은 가능하면 피하도록 한다.
일부 글꼴에서는 구분이 안되는 문자들이 있을 수 있다.
a, b, c (X)
9 변수명, 함수명은 소문자를 사용하고 단어의 연결은 _를 사용한다. python_test
python_example
10 클래스명은 첫 글자는 대문자로 사용한다.
단어가 연결된 클래스 명은 각 단어의 첫 글자를 대문자로 사용한다.
PythonClass
11 상수명은 모두 대문자를 사용한다. MAX_NUMBER
12 인라인 주석은 자제해서 사용한다. 사용하게 되면 최소 2개의 공백, # 이후 공백하나를 준수한다. 1번 참고
13 == 를 사용하여 Bool 값을 비교하지 않는다. true_false = False

if not true_false:
    print(true_false)
14 객체 유형 비교에서는 유형을 직접 비교하는 대신 isinstance를 사용하여 비교한다. aa: int = 1

if isinstance(aa, int):
    print(True)
15 None을 is를 사용하여 비교할 때에는, not을 먼저 쓰지 않는다. aa = None

if aa is not None  # (O)
if not aa is None  # (X)
16 람다 식을 식별자에 직접 바인딩하는 할당 문 대신 def문을 사용한다. def f(x):
    return 2*x  # (O)

f = lambda x: 2*x  # (X)

(참고) Python에서 권장하는 코딩 규칙을 더 알아보고 싶으면 아래 링크를 참고하자.

https://legacy.python.org/dev/peps/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds

728x90
반응형
LIST
728x90
반응형
SMALL
Python에서 사용되는 예약어를 알아보고,
어떻게 사용되는지 예문을 통해서 확인해 보자!

 

■ 예약어 리스트

No 예약어 설명 예문 결과값
1 and 조건 A와 조건 B가 모두 참이면 True,
그렇지 않으면 False
a = 100
b = 200

if a > 10 and b > 10:

    print("True")
else:
    print("False")
True
2 as 모듈명에 별칭을 부여할 때 사용(18번 참고) import 모듈1 as rush

rush.함수
rush.클래스
 
3 assert 디버깅을 위한 용도로 사용 test_false = [1, 2, 3, "오류", 5]
test_true = [1, 2, 3, 4, 5]


print("test_true : 시작")
for i in test_true:
    assert type(i) is int, '문자'
print("test_true : 끝")

print("test_false : 시작")
for i in test_false:
    assert type(i) is int, '문자'
print("test_false : 끝")
assert type(i) is int, '문자'
AssertionError: 문자
test_true : 시작
test_true : 끝
test_false: 시작

4 break 반복문을 중지할 때 사용 test = [1, 2, 3, 4, 5]

for i in test:
    if i == 3:
        break
    else:
        print(i)
1
2
5 class 사용자 정의 클래스를 만들 때 사용    
6 continue 새로운 반복 단계를 시작할 때 사용 test = [1, 2, 3, 4, 5]

for i in test:
    if i == 3:
        continue
    else:
        print(i)
1
2
4
5
7 def 사용자 정의 함수를 만들 때 사용    
8 del 객체를 삭제할 때 사용 test = [1, 2, 3, 4, 5]

del test[0]

print(test)
[2, 3, 4, 5]
9 elif else if의 줄임말 if 조건문:
    생략..
elif 조건문:
    생략..
else:
    생략..
 
10 else 조건문을 만들때 사용 9번 참고  
11 except 예외 상황이 발생했을 때 사용 test = [1, 2, 3, 4, 5]

try:
    print(test[4])
    print(test[5])
except:
    print("index 5 없음")
finally:
    print("finally")
5
index 5 없음
finally
12 exec 파이썬 코드를 동적으로 실행하기 위해 사용,
프로그램 사용중에 코드 생성이 가능함
   
13 finally 예외 처리에서 최종적으로 실행되는 부분 11번 참고  
14 for 반복문 3번 참고  
15 from 모듈에 특정 함수 및 변수 사용 from 모듈 import test

print(test())

모듈안에 test로 선언된 함수 바로 사용 가능
 
16 global 전역변수 선언할때 사용,
함수 안에서 사용할 때도 global이라는 이름을 명시
global gbl
gbl = "global"


def test():
    global gbl
    gbl = "test_global"

    return "test"


def test_1():
    return gbl


print(test())
print(test_1())
test
test_global
17 if 조건문을 만들때 사용 9번 참고  
18 import 모듈을 가져올 때 사용,
모듈안에 정의되어 있는 변수, 함수, 클래스 사용 가능
import 모듈1
import 모듈2, 모듈3

모듈1.함수
모듈2.클래스
 
19 in 값이 컨테이너 데이터에 포함되는지를
확인할 때 사용
test = [1, 2, 3, 4, 5]

if 6 in test:
    pass
else:
    print("값 없음")
값 없음
20 is 객체의 동일성을 확인할때 사용 3번 참고  
21 lambda 람다 함수를 만드는데 사용 func = lambda x: x + 10
print(func(2))
12
22 not not을 사용하면 조건을 반대로 해석 a = 100
b = 200

if not (a > 10 and b > 10):

    print("True")
else:
    print("False")
False
23 or 조건 A, 조건 B 둘중에 하나가 참이면 True,
그렇지 않으면 False
a = 100
b = 200

if a > 200 or b > 10:

    print("True")
else:
    print("False")
True
24 pass 특별한 행위가 없을 때 사용 19번 참고  
25 print 화면에 출력을 할 때 사용    
26 raise 사용자 정의 예외를 발생시킬 때 사용 test = [1, 2, 3 ,4, 5]

def raise_event():
    print("raise_event")

try:
    print(test[6])
except:
    raise raise_event()
TypeError: exceptions.....(생략)
raise_event
27 return 함수의 반환값을 전달하는데 사용 16번 참고  
28 try 예외 처리를 명시하기 위해 사용 11번 참고  
29 while 반복문 a = 1

while a <=3:
    print(a)
    a = a + 1
1
2
3
30 with 클래스 호출할 때 사용,
with문을 사용하면 with문 안에서만 클래스 사용이 가능,
with문이 끝나면 자동으로 클래스가 닫힘
with 클래스명 as cls:
    cls.함수명1
    cls.함수명2
 
31 yield 제네레이터를 만들기 위해 사용    

(참고) Python에서 사용하는 예약어는 식별자 (변수명,  함수명,  클래스명, 모듈명)로 사용할 수 없다.

728x90
반응형
LIST
728x90
반응형
SMALL
Python을 공부하다 보면 인공지능과 매우 밀접한 관련이 있다는 것을 알 수 있다.
왜 인공지능은 Python으로 개발할까?
다른 언어로는 인공지능을 개발할 수는 없을까?
Python이 C/C++ 보다 느린데 인공지능에 많이 사용되는 이유와
Python으로 개발하지 않았을 때의 단점을 알아보자.

 

■ Python이 AI에 가장 많이 사용되는 이유

1. 다양한 AI 및 머신 러닝 라이브러리와 프레임워크를 지원한다.

    TensorFlow, PyTorch, scikit-learn, Keras, OpenCV 등 많은 인공지능 도구와 라이브러리가 Python으로 개발되었다.

    이러한 라이브러리를 활용하여 AI 모델을 구축하고 학습시킬 수 있다.

2. 문법이 간결하고 읽기 쉬워서 비전공자와 전문가 모두가 코드를 이해하고 작성하기 쉽다. 이는 AI 모델의 프로토타입 작업 및 실험에 매우 유용하다.

3. 데이터는 AI 및 머신 러닝 작업의 핵심이며, Python은 데이터 분석 및 시각화를 위한 라이브러리와 도구를 풍부하게 제공한다.

    Pandas, NumPy, Matplotlib, Seaborn과 같은 라이브러리를 사용하여 데이터를 처리하고 시각화할 수 있다.

4. 활발한 AI 및 머신 러닝 커뮤니티를 가지고 있으며, AI 연구 및 개발에 관한 다양한 자료, 튜토리얼, 라이브러리, 오픈 소스 프로젝트가 존재한다.

    이러한 커뮤니티는 지식 공유와 협력을 촉진한다.

5. 여러 운영 체제에서 동작하므로, 다양한 환경에서 AI 모델을 개발하고 배포할 수 있다.

6. 빠른 프로토타이핑에 적합하며, 아이디어를 빠르게 구현하고 실험할 수 있다.

7. 다양한 머신 러닝 및 딥 러닝 프레임워크를 지원한다. 이러한 프레임워크를 사용하여 복잡한 AI 모델을 구축하고 학습시킬 수 있다.

8. 다른 언어와 연동하기 쉽고, 사용자 정의 라이브러리와 모듈을 개발하여 기능을 확장하기 용이하다.

9. 하나의 명령어로 여러 프레임워크를 작업 공간에 설치할 수 있다.

10. 메모리를 대신 관리한다.

 

■ Python으로 개발하지 않았을 때의 단점

1. 메모리 관리를 직접 처리해야 하며, 이로 인해 메모리 누수 및 오류가 발생할 수 있다.

2. 풍부한 라이브러리와 프레임워크를 활용할 수 없을 가능성이 있다.

3. 특정 언어나 프레임워크는 특정 플랫폼에 종속될 수 있으므로, 플랫폼 독립성이 필요한 경우에는 문제가 될 수 있다.

 

(참고) TensorFlow, PyTorch, scikit-learn, Keras, OpenCV

1. TensorFlow

  - Google Brain 팀에 의해 Python 기반으로 개발되었으며 2015년에 공개되었다. 딥 러닝 및 머신 러닝을 위한 오픈 소스 라이브러리다.

2. PyTorch

  - 딥 러닝 및 기계 학습을 위한 오픈 소스 프레임워크로 Python 기반으로 개발되었으며, 동적 계산 그래프를 사용하여 딥 러닝 모델을 구축하고 학습하는 데 사용된다.

    텐서 처리 및 자동 미분을 통한 모델 학습을 지원한다.

3. scikit-learn

  - Python에서 사용할 수 있는 머신 러닝 라이브러리로, 다양한 머신 러닝 알고리즘과 효과적인 데이터 분석 도구를 제공하여 모델 구축과 평가를 용이하게 한다.

    데이터 과학 및 머신 러닝, 예측 모델 개발 프로젝트에 활용된다.

4. Keras

  - 러닝 모델을 쉽게 구축하고 학습시키기 위한 고수준 딥 러닝 프레임워크로, 특히 신경망 모델을 쉽게 만들고 훈련시키는 데 사용된다.

    TensorFlow와 같은 백엔드 엔진을 지원하여 딥 러닝 작업을 단순화하고 가독성을 향상시킨다.

    연구, 실험, 프로토타이핑 및 실제 응용 프로그램 개발에 널리 사용된다.

5. OpenCV

  - 컴퓨터 비전 및 이미지 처리를 위한 오픈 소스 라이브러리로, 이미지 및 비디오 처리, 객체 감지, 얼굴 인식, 패턴 인식, 카메라 캘리브레이션 등

    다양한 컴퓨터 비전 작업을 지원한다.

    OpenCV는 C++, Python, Java와 같은 다양한 프로그래밍 언어에서 사용할 수 있으며, 머신 러닝 및 딥 러닝 모델과의 통합도 지원한다.

    컴퓨터 비전 연구, 로봇공학, 의료 이미지 처리, 자율 주행 자동차 등 다양한 응용 분야에서 활용된다.

728x90
반응형
LIST
728x90
반응형
SMALL
Python 정규식의 표현 및 사용방법을 알아보자.
알아두면 매우 유용하게 사용할 수 있다.

 

■ 정규식 : [] 안에 . ^ $ * + ? { } [ ] \ | ( ) 을 사용하는 식

표현식 동일 표현식 설명
\d [0-9] 숫자와 매치
\D [^0-9] 숫자가 아닌 것과 매치
\s [\t\n\r\f\v] 공백 매치
\S [^\t\n\r\f\v] 공백 아닌 것과 매치
\w [a-zA-z0-9_] 문자, 숫자 매치
\W [^a-zA-z0-9_] 문자, 숫자 아닌 것과 매치
.   a.d 사이에 들어가는 모든 문자와 매치 (Yes : abcd, abd    No : ade, a0e)
ab*c   * 바로 앞에 있는 문자 b가 0부터 매치 (ac, abc, abbc 모두 매치)
ab+c   * 과 동일, 다른점은 문자 b가 1부터 매치 (ac는 매치 안됨)
ab{2}c   b가 2번 반복 되어야 매치 (Yes : abbc    No : abc)
ab{2,5}c   b가 2~5번 반복되면 매치
ab?c ab{0,1}c b가 0~1번 반복되면 매치
^abc   문자열의 처음은 항상 abc로 시작하면 매치 (re.MULTILINE 일 경우 라인별 첫 문자)
\Aabc   문자열의 처음은 항상 abc로 시작하면 매치 (re.MULTILINE 과 상관없음)
abc$   문자열의 마지막은 항상 abc로 끝나면 매치 (re.MULTILINE 일 경우 라인별 첫 문자)
abc\Z   문자열의 마지막은 항상 abc로 끝나면 매치 (re.MULTILINE 과 상관없음)
abc|def   abc 또는 def가 있으면 매치
\babc\b   앞뒤로 스페이스가 있을 경우에만 매치
\Babc\B   앞뒤로 스페이스가 없을 경우에만 매치

 

■ 정규식 응용

import re

p = re.compile('[a-z]+')

 

m = p.match("abc")    # 문자열 처음부터 정규식과 매치되는지 확인

print(m)    # 결과값 : <re.Match object span=(0, 3), match='abc'>

 

m = p.match("00abc")

print(m)    # 결과값 : None

 

m = p.search("abc")    # 문자열 전체를 검색하여 정규식과 매치되는지 확인

print(m)    #과값 : <re.Match object; span=(0, 3), match='abc'>

 

m = p.search("00abc")

print(m)    # 결과값 : <re.Match object; span=(2, 5), match='abc'>

 

m = p.findall("a b c")    # 리스트로 반환

print(m)    # 결과값 : ['a', 'b', 'c']

 

m = p.finditer("abc def ghi")    # 반복 가능한 개체로 돌려줌

print(m)    # 결과값 : <callable_iterator object at 0x000001886C72FFD0>

for i in m:

    print(i)

# 결과값

# <re.Match object; span=(0, 3), match='abc'>

# <re.Match object; span=(4, 7), match='def'>

# <re.Match object; span=(8, 11), match='ghi'>


참고) 위 2줄은 아래 1줄로 사용할 수 있음.

p = re.compile('[a-z]+')

m = p.match("abc")

 

m = re.match('[a-z]+', "abc")


# #1, #2의 차이점

import re

 

p = re.compile("^abc\s\w+")    #1

p = re.compile("^abc\s\w+", re.MULTILINE)    #2

 

data = """abc one

abc two

abc three"""

 

print(p.findall(data))    # 결과값 : ['abc one'] - 첫 번째 줄만 매치    #1

print(p.findall(data))    # 결과값 : ['abc one', 'abc two', 'abc three'] - 라인별로 매치    #2


# '\abc'를 찾을 때는 \를 하나 더 쓴다. '\\abc'를 찾을 때는 '\\\\abc' 이렇게 사용한다.

p = re.compile("\\abc")

 

# 간단하게 사용하는 방법은 앞에 r을 붙이면 된다. 

p = re.compile(r"\abc")


# 전화번호 형태의 정규식

p = re.compile(r"(?P<name>\w+)\s+(?P<phone>\d+[-]\d+[-]\d+)")

m = p.search("mobile 010-1234-5678")

 

print(m.group(0))    # 결과값 : mobile 010-1234-5678 (전체 문자열 반환)

print(m.group(1))    # 결과값 : mobile (괄호로 묶인 1번째 문자열 반환)

print(m.group("name"))    # 결과값 : mobile (괄호로 묶인 1번째 문자열을 name이라는 이름을 통하여 문자열 반환)

print(m.group(2))    # 결과값 : 010-1234-5678 (괄호로 묶인 2번째 문자열 반환)


# 문자열 바꾸기

p = re.compile("(park|kim|lee)")

m = p.sub("first", "park name and kim name")

print(m)    # first name and first name

 

p = re.compile(r"(?P<name>\w+)\s+(?P<phone>\d+[-]\d+[-]\d+)")

m = p.sub("\g<phone> \g<name>", "mobile 010-1234-5678")

print(m)    # 결과값 : 010-1234-5678 mobile

728x90
반응형
LIST
728x90
반응형
SMALL
Python 내장 함수 및 라이브러리를 어떻게 사용하는지, 파일 읽기, 쓰기 등 어떻게 하는지 살펴보자.

 

■ 파일 읽기, 쓰기 등 

# 파일 생성

f = open("d:/new.txt", 'w')    # 'r' : 읽기 모드    'w' : 쓰기 모드    'a' : 추가모드

for i in range(0, 10):    # 0~9까지 

    a = str(i) + "row\n"    # "\n"은 new line

    f.write(a)

f.close()    # close를 하지 않으면 파일이 열려 있는 상태이므로 꼭 close를 해줘야 한다. (파일 삭제가 되지 않음)

 

# 파일 읽기 (case1 ~ case3)

f = open("d:/new.txt" , 'r')

 

# case1 - line별로 담아서 출력

lines = f.readlines()

for line in lines:

    print(line)

 

# case2 - line 1개 출력

line = f.readline()

print(line)

 

# case3 - line 1개를 담아 1 글자씩 출력

lines = f.readline()

for line in lines:

    print(line)

 

f.close()

 

# read를 통하여 한번에 가져오기

f = open("d:/new.txt" , 'r')

a = f.read()

print(a)

f.close()

 

# 파일 내용 추가

f = open("d:/new.txt", 'a')

for i in range(10, 20):    # 10~19까지

    a = str(i) + "row"

    f.wirte(a)

f.close()

 

# f.close()를 사용하지 않고 파일 닫기

with open("d:/new.txt", 'r') as f:

    f.read()

 

■ Python 내장 함수

1. 절대값 : abs(-1.3) → 1

2. 모두 참이면 : all([1,2,3,4,5]) → True,    all([0,1,2,3,4]) → False

3. 하나라도 참이면 : any([0,1,2,3]) → True

4. 몫과 나머지 : divmod(9, 4) → (2, 1)

5. 정수 변환 : int(1.4) → 1

6. 문자열 변환 : str(7) → '7'

7. 리스트 변환 : list("12345") → ['1', '2', '3', '4', '5']

8. 튜플 변환 : tuple("12345") → ('1', '2', '3', '4', '5')

9. 길이 : len("12345") → 5

10. 최대값 : max([1, 2, 3]) → 3

11. 최소값 : min([1, 2, 3]) → 1

12. 아스키 값 : ord("a") → 97

13. 제곱 : pow(2, 3) → 8

14. 범위

   - list(range(5)) → [0, 1, 2, 3, 4]

   - list(range(5, 10)) → [5, 6, 7, 8, 9]

   - list(range(1, 10, 2)) → [1, 3, 5, 7, 9]

15. 반올림

   - round(0.7) → 1

   - round(0.5) → 0    # ※ 0이 되는 것 주의

   - round(0.555, 2) → 0.56

16. 정렬 : sorted([3, 2, 1]) → [1, 2, 3]

17. 합 : sum([2, 3, 5]) → 10

18. 자료형 가져오기 : type("a") → <class 'str'>

19. 자료형 묶음 : list(zip([1, 2], [3, 4])) → [(1, 3), (2, 4)]

 

■ 라이브러리(library) 사용

import os

import shutil

import glob

import tempfile

import time

import calendar

import webbrowser

 

os.environ    # 환경변수 출력

os.chdir("d:/")    # 디렉터리 변경

os.getcwd()    # 디렉터리 위치

 

shutil.copy("d:/new.txt", "d:/new1.txt")    # new.txt을 new1.txt로 복사, 파일이 있으면 덮어씀

 

glob.glob("d:/new*")    # d드라이 안에 new로 시작하는 파일 찾기

 

file = tempfile.mkstemp()    # 중복되지 않은 임시 파일을 만듦, 결과값은 파일 경로

# 임시로 파일을 만들고, close()로 파일을 삭제한다.

f = tempfile.TemporaryFile()

f.close()

 

time.time()    # 1970.01.01 00:00:00 기준으로 지난 시간을 초단위로 반환 (UTC 기준)

time.localtime(time.time())    # 년, 월, 일, 시, 분, 초로 반환

time.asctime(time.localtime(time.time()))    # 날짜 정렬

time.ctime()    # 오늘날짜 반환

time.strftime('%a', time.localtime())    # 요일 반환 (형태 : 'Sun') - 날짜 포맷 코드는 아래 표 참고

 

calendar.calendar(2023)    # 2023년 달력 (한 줄 표시)

calendar.prcal(2023)    # 2023년 달력 (달력처럼 표시)

calendar.prmonth(2023, 5)    # 2023년 5월 달력

calendar.weekday(2023, 5, 21)    # 6 반환 (월요일 : 0 ~ 일요일 : 6)

calendar.monthrange(2023, 5)    # (0, 31) 반환 : 0은 5월 시작일의 요일, 31은 5월의 마지막 날

 

webbrowser.open("http://200-rush.tistory.com")    # 해당 url open

 

■ 날짜 포맷 코드

코드 표현 (설명) 코드 표현 (설명) 코드 표현 (설명)
%a 'Sun' (약자) %I '02' (12시 기준 시간) %w '0' (요일)
%A 'Sunday' %j '141' (1년 중 누적날짜) %W '20' (1년 중 누적 주 - 월요일 시작)
%b 'May' (약자) %m '05' (월) %x '05/21/23/
%B 'May' %M '08' (분) %X '14:13:39'
%c Sun May 21 14:04:38 2023 %p 'AM' or 'PM' %Y '2023'
%d '21' (날짜) %S '23' (초) %Z '대한민국 표준시'
%H '14' (24시 기준 시간) %U '21' (1년 중 누적 주 - 일요일 시작) %y '23' (yy만 표시)

- 날짜 포맷 코드 응용 : time.strftime('%Y%m%d', time.localtime()) → '20230521'

728x90
반응형
LIST
728x90
반응형
SMALL
Python 자료형 정리 list, tuple, dictionary, bool, 집합 사용법

 

■ 리스트(list) 자료형

a = [1, 2, 3, 4, 5]

b = [6, 7, 8, 9]

 

# 사용 및 결과값

a[0] → 1, a[1] → 2 ...

a[0:2] → [1, 2]

a[:2] → [1, 2]

a[2:] → [3, 4, 5]

a[2] = 10 → [1, 2, 10, 4, 5]

 

# 순서대로 리스트 아래 명령어를 실행하면 a값이 변경된다.

del a[2] → [1, 2, 4, 5]    # 10 제거

a.append(9) → [1, 2, 4, 5, 9]    # 맨 뒤 값 추가

a.reverse() → [9, 5, 4, 2, 1]    # 정렬

a.sort() → [1, 2, 4, 5, 9]    # 정렬

a.insert(0, 0) → [0, 1, 2, 4, 5, 9]

a.remove(0) → [1, 2, 4, 5, 9]

a.pop() → 9    # 맨 끝 자리 값 출력 후 삭제

a → [1, 2, 4, 5]    # 삭제 후 값

a.pop(1) → 2

a → [1, 4, 5]

a.count(4) → 1    # 1의 갯수

a.extend([6, 7]) → [1, 4, 5, 6, 7]

 

■ 튜플(tuple) 자료형

1. 리스트와 비슷하나, [] 대신 ()으로 감싸고, 값을 수정할 수 없다.

- 사용법 : a = 1,2,3 또는 a = (1,2,3), 안에 값이 1개일 경우에는 a = (1,)과 같이 ,를 붙여준다.

 

■ 딕셔너리(dictionary) 자료형

dic = {"key": "키", "value": "벨류"}

 

dic["key"] 또는 dic.get("key") → '키'    # 차이점 : 키 값이 없는 "aa"로 찾는 경우 전자는 에러, 후자는 None값을 가져온다.

dic["value"] 또는 dic.get("value") → '벨류'

dic.get("aa", "기본값") → '기본값'    # 키 값이 없는 경우 None값이 아닌 뒤에 지정한 '기본값'으로 가져온다.

dic["add"] = "추가"

dic → {'key': '키', 'value': '벨류', 'add': '추가'}

del dic["add"]

dic → {'key': '키', 'value': '벨류'}

dic.keys() → dict_keys(['key', 'value'])

dic.values() → dict_values(['키', '벨류'])

dic.items() → dict_items([('key', '키'), ('value', '벨류')])

"key" in dic → True    # 딕셔너리에 키 값이 있는지 체크

 

■ 교집합, 차집합, 합집합

aa = [1, 2, 3, 4]

bb = [3, 4, 5, 6]

 

set(aa) & set(bb) → {3, 4} 또는 set(aa).intersection(set(bb))    # 교집합

set(aa)-set(bb) → {1, 2} 또는 set(aa).difference(set(bb))    # 차집합

set(aa).union(set(bb)) → {1, 2, 3, 4, 5, 6}    # 합집합

 

■ 불(bool) 자료형

1. 문자인 경우 빈값이면 False

2. 리스트인 경우 리스트가 없으면 False

3. 숫자인 경우 0이 아니면 True, 그 외 False

 

참고: Python 자료형 정리 (숫자형, 문자형)

728x90
반응형
LIST
728x90
반응형
SMALL
Python 자료형 정리, 숫자형, 문자형 사용법

 

1. 숫자형 더하기 : 1 + 2 → 3

2. 문자형 더하기 : "aa" + "bb" → 'aabb'

3. 숫자형 곱하기 : 1 * 2 → 2

4. 문자형 곱하기 : "aa" * 3 → 'aaaaaa'

5. 제곱근 : 2 ** 4 → 16

6. 나누기 : 1 / 2 → 0.5

7. 나머지 : 3 % 2 → 1

8. 몫 : 8 // 3 → 2

9. 문자열 만들기 : "" 또는 ''로 감싸도 동일, 문자열 안에 ', "표현은 아래와 같이 처리

- "abc'd" → abc'd 또는 'abc"d' → abc"d

- 같은 문자로 감싸는 경우는 " 또는 ' 앞에 \ 를 붙인다. ("abc\"d" → abc"d)

10. 줄 바꿈

- 문자열 안에 \n 삽입 또는 """ """를 이용

"aaaaa\nbbbb"

"""

aaa

bbb

"""

11. 문자열 길이 : len("aa") → 2

12. 문자열 가져오기 : 문자열 첫 번째는 0부터 시작, -1은 뒤에서부터 시작

a = "abcd"

# 문자열 첫 번째는 0부터 시작

a[0] → "a", a[1] → "b", a[2] → "c", a[3] → "d"

 

a[-1] → "d"    # -1은 뒤에서부터 시작

a[0:3] → "abc"    # 0번째부터 3번째까지 (주의 : 마지막 인덱스는 제외)

a[1:3] → "bc"    # 1번째부터 3번째 까지(주의 : 마지막 인덱스는 제외)

a[2:] → "cd"    # 2번째부터 끝까지

a[:2] → "ab"    # 2번째까지(주의 : 마지막 인덱스는 제외)

a[0::2] → "ac"    # 0번째부터 끝까지, 2자리씩

a[-1::-2] → "db"    # 끝에서부터 0번까지, 2자리씩 역순

a[-1:0:-1] → "dcb"    # 끝에서부터 0번까지, 역순(주의 : 마지막 인덱스는 제외)

a[-1::-1] → "dcb"    # 끝에서부터 0번까지, 역순

 

# 주의할 점 : 인덱스 범위 지정 시, 마지막 인덱스를 지정해 주면 마지막 인덱스는 제외하고 출력된다.

13. 대입(치환) : %s는 숫자, 문자 다 됨

- 숫자형 (결과값 : '손가락 5개')

   - "손가락 %d개" % 5

   - "손가락 {0}개".format(5)

   - "손가락 {a}개".format(a=5)

- 문자형 (결과값 : '손가락 다섯개')

   - "손가락 %s개" % "다섯"

   - "손가락 {0}개".format("다섯")

   - "손가락 {a}개".format(a="다섯")

- 조합 (결과값 : '손가락 5개, 다섯개')

   - "손가락 %d개, %s개" % (5, "다섯")

   - "손가락 {0}개, {1}개".format(5, "다섯")

   - "손가락 {a}개, {b}개".format(a=5, b="다섯")

- "%"가 포함되어 있는 경우 : "%d%%" % 100 = '100%'

14. 정렬, 공백

- 우측 정렬 (결과값 : '    p')

   - "%5s" % "p"

   - "{0:>5}".format("p")

   - f"{'p':>5}"

- 좌측 정렬 (결과값 : 'p    ')

   -  : "%-5s" % "p"

   - "{0:<5}".format("p")

   - f"{'p':<5}"

- 가운데 정렬 (결과값 : '  p  ')

   - "{0:^5}".format("p")

   - f"{'p':^5}"

 - 공백 채우기 : (결과값 : '++p++')

   - "{0:+^5}".format("p")

   - f"{'p':+^5}"

- 소숫점 : (결과값 : '    1.1234')

   - "%10.4f" % 1.1234

   - "{0:10.4f}".format(1.1234)

   - f"{1.1234:10.4f}"

15. 문자 개수 세기

결과 : 3

a = abbcccdddd

a.count('c')

16. 문자 찾기

결과 : 3

a = abbcccdddd    # c가 있는 첫 번째 위치

a.find('c')    # c라는 문자열이 없으면 -1

a.index('c')    # c라는 문자열이 없으면 에러

17. 문자 삽입

결과 : 'a,b,c,d'

",".join('abcd')

",".join(['a', 'b', 'c', 'd'])

18. 소문자를 대문자로, 대문자를 소문자로

a = "ab"

b = "CD"

a.upper()    # 결과값 : 'AB'

b.lower()    # 결과값 : 'cd'

19. 공백 지우기

a = "  ab  "

a.lstrip()    # 왼쪽 공백 지우기 결과값 : 'ab  '

a.rstrip()    # 오른쪽 공백 지우기 결과값 : '  ab'

a.strip()    # 양쪽 공백 지우기 결과값 :  'ab'

20. 문자 바꾸기

a = "aabbcc"

a.replace("bb", "kk")    # 결과값 : 'aakkcc'

21. 문자 나누기

a = "aa bb cc dd"

b = "aa,bb,cc,dd"

 

a.split()    # 결과값 : '''aa, ''bb, 'cc', 'dd']

b.split(",")    # 결과값 : ['aa', 'bb', 'cc', 'dd']

 

참고 : Python 자료형 정리 (list, tuple, dictionary, bool, 집합)

728x90
반응형
LIST

+ Recent posts