파이썬에서 사용하는 자료 형태에 대해서 배워보자.
1. 숫자형
가. 타입
- 정수(int), 실수(float), 복소수(complex) (※ 정수 ⊂ 실수 ⊂ 복소수)
- type( ) : 객체의 자료형(타입) 확인하기
- int( ): 정수화
- float( ): 실수화
int(3.3) = 3
나. 사칙연산
너무나 당연하게도 파이썬에서는 사칙연산 기호를 활용하여 사칙연산을 할 수 있다.
사칙연산
🖊️ 몫과 나머지를 함께 구하고 싶다면?
- divmod를 사용하면 된다.
- divmod(5,2) = (2,1)
- 위 처럼 (몫, 나머지) 튜플 형태로 값이 출력된다.
다. 연산자
관계연산자
대입연산자
2. 문자열 자료형
가. 문자열(string) 생성
- "문자열"
- '문자열'
- """문자열"""
- '''문자열'''
작은따옴표나 큰따옴표 3개를 사용하면 여러 줄에 거쳐서 문자열을 입력할 수 있다.
🖊️ 따옴표 세개를 사용하지 않고 여러 줄로 문자열 작성하기
문자열 안에 개행 문자(\n)를 넣으면 여러 줄로 문자열을 작성할 수 있다.
print('Sooyoon\nTistory')
나. 이스케이프 시퀀스: 문자열에 따옴표가 들어있는 경우
- 이스케이프 코드를 사용하여 예외처리를 할 수가 있다.
'sooyoon\'s tistory'
이스케이스 코드
다. 문자열 연산하기
파이썬에서 숫자 뿐만 아니라 문자열도 연산을 할 수가 있다.
- 연산자를 이용해 문자열과 숫자를 연산(+, -, * 등)할 수 있다.
- 그러나, 문자열과 숫자를 더하거나 뺄 경우에는 오류가 난다.
- 문자열과 숫자를 연결하고 싶다면 'f-string'을 사용하자.
라. 문자열 응용하기
문자열은 문자열을 조작하거나 정보를 얻을 수 있는 다양한 메서드(method)를 제공한다.
자주 사용하는 method를 하나씩 사용해보도록 하자.
참고로 method는 "적용할 객체".method() 형태로 사용하며 연결해서 사용하는 메서드 체이닝도 가능하다.
1) replace('old','new',[count]) : 문자열 바꾸기
- 바뀐결과를 유지하고 싶다면 문자열이 저장된 변수에 재할당해주면 된다.
2) translate( ) : 문자열 안의 문자를 바꾸기
table = str.maketrans('aeiou', '12345')
'apple'.translate(table)
위와 같이 입력하면 결과 값으로 '1pp12'가 출력된다.
(a -> 1, e -> 2 ... p는 바꿀 문자가 없기 때문에 그대로 출력되었다.)
3) 문자열 분리하기
- split('기준 문자열'): 괄호안의 값을 기준으로 문자열을 구분한다. default = " " (공백)
a, b = input( ).split( )
print(a, b)
a, b = map(int, input().split())
print(a, type(a), b, type(b))
4) 문자열 연결하기
- "구분자문자열".join(리스트) : 리스트 사이 사이에 구분자 문자열을 넣어주며 리스트 요소를 연결한다.
- "-".join(리스트): 리스트 요소 값 사이 사이 '-'가 들어가며 연결된다.
5) 대문자/소문자로 바꾸기
- upper()
- lower()
6) 공백삭제하기
- strip(): 양쪽 공백 삭제하기
- lstrip(): 왼쪽 공백 삭제하기
- rstrip(): 오른쪽 공백 삭제하기
7) 특정문자 삭제하기
- strip('삭제할 문자들'): 양쪽의 특정 문자 삭제
- lstrip('삭제할 문자들'): 왼쪽의 특정 문자 삭제
- rstrip('삭제할 문자들'): 오른쪽의 특정 문자 삭제
🖊️각종 구두점 일괄삭제하는 방법
string 모듈의 punctuation에는 모든 구두점이 들어있다.
strip(string.punctuation)을 하면 해당 구두점들을 일괄로 삭제해줄 수 있다.
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
8) 문자열 왼쪽/오른쪽/가운데로 정렬하기
- ljust(길이): 입력한 길이로 문자열을 만든 뒤 왼쪽으로 정렬하며 남는 공간을 공백으로 채움
- rjust(길이): 입력한 길이로 문자열을 만든 뒤 오른쪽으로 정렬하며 남는 공간을 공백으로 채움
- center(길이): 입력한 길이로 문자열을 만든 뒤 가운데로 정렬하며 남는 공간을 공백으로 채움
※ 남는 공백이 홀수이면 왼쪽에 한칸을 더 준다.
9) 문자열 왼쪽에 0 채우기
- zfill(길이): 입력한 길이에 맞춰서 문자열의 앞쪽에 0을 채움
※ 문자열의 길이보다 지정된 길이가 작다면 아무것도 채우지 않는다.
10) 문자열 위치찾기
- find('찾을 문자열'): 문자열에서 입력한 특정 문자열을 찾고 인덱스를 반환
※ 문자열이 없으면 -1 반환
※ 왼쪽부터 탐색하며 같은 문자가 여러 개일 경우 처음 찾은 문자열의 인덱스를 반환
- rfind('찾을 문자열'): 문자열에서 입력한 특정 문자열을 찾고 인덱스를 반환
- index('찾을 문자열'): find와 기능은 유사하지만, 찾는 문자열이 없는 경우 에러 발생
- rindex('찾을 문자열'): rfind와 기능은 유사하지만, 찾을 수 없는 경우 에러 발생
11) 문자열 개수 세기
- count('문자열') : 현재 문자열에서 특정 문자열이 몇 번 나오는지 개수를 세어줌
라. 문자열 인덱싱과 슬라이싱
1) 인덱싱: index + ing, 한 문자만 가져올 때 사용 [index 번호]
2) 슬라이싱: slice + ing, 여러 문자를 가져올 때 사용 [시작인덱스 : 종료인덱스 + 1]
3) 뒤집기
인덱싱에서 3번째 인자는 가져올 요소의 간격을 의미한다.
ex) a = [0, 1, 2, 3, 4, 5, 6]
a[1:5:2] = [1, 3, 5]
세번째 인자에 음수를 입력하면 거꾸로 가지고 오게 된다.
즉, -1을 입력하면 거꾸로 1개씩 가지고 오게되는 것이다.
3. 변수
가. 변수 생성규칙
- 영문 문자와 숫자를 사용할 수 있다.
- 변수명은 숫자로 시작할 수 없다. (문자로 시작해야 한다.)
- 대소문자를 구분한다.
- 변수명은 언더바(_)를 제외한 특수문자를 사용할 수 없다.(참고로 언더바로 시작할 수 있다.)
- 예약어 및 내장함수는 변수명으로 사용하지 않는다.
*python keyword 출력
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
*python 메서드(dir 사용) 출력
import builtins
print(dir(builtins))
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__IPYTHON__', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'display', 'divmod', 'enumerate', 'eval', 'exec', 'execfile', 'filter', 'float', 'format', 'frozenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'runfile', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
나. 변수의 할당
변수이름 = 값
여러개를 한꺼번에 할당할 수도 있다.
a, b, c = 1, 2, 3
다. 변수 삭제하기 / 빈 변수 만들기
1) 변수 삭제하기
x = 'python'
del x
변수가 사라졌기 때문에 출력하면 오류가 날 것이다.
2) 빈 변수 만들기
x = None
라. input으로 사용자 입력 받기
input()을 사용하면 사용자가 입력한 값을 받을 수가 있다.
※ input 함수로 입력 받은 값의 기본 값은 문자열이다.
a = input("입력해주세요")
print(a)
split을 함께 사용하기
a, b = input('숫자 두 개 입력: ').split()
map과 split 함께 사용
map을 사용해주면 일괄적으로 자료형을 입력해줄 수 있다.
- 변수1, 변수2 = map(int, input().split())
- 변수1, 변수2 = map(int, input().split('기준문자열')
- 변수1, 변수2 = map(int, input('문자열').split())
- 변수1, 변수2 = map(int, input('문자열').split('기준문자열'))
n = 123
n = list(str(n))
lis = list(map(int,n))
sum(lis)
마. 문자열과 변수를 함께 출력하는 방법(포맷팅, f-string)
- f-string
- %d, %s
year, month, day = 2022, 09, 22
print(f"안녕하세요. 오늘은 {year}년 {month}월 {day}일 입니다.")
4. 리스트
리스트를 사용하면 변수에 여러 개의 값을 저장할 수 있다.
또한, 리스트에는 문자열, 정수, 실수, 불 등 모든 자료형을 저장할 수 있고 여러 자료형을 섞어서 저장할 수도 있다.
가. 리스트 생성하기
- 리스트명 = [요소1, 요소2, ...]
- n = list( )
참고로 range를 활용해서 생성하는 것도 가능하다.
- 리스트명 = list(range(시작, 끝, 증가폭))
나. 리스트 인덱싱과 슬라이싱
1) 인덱싱: 리스트명[인덱스 번호]
2) 슬라이싱: 리스트명[시작인덱스:종료인덱스 +1]
intro = ["Hi", "my", "name", "is", "sooyoon"]
intro[2]
intro[2:5]
3) 중첩된 리스트에서도 인덱싱 및 슬라이싱이 가능하다.
# 'b'출력하기
a = [1, 2, 3, ['a', 'b', 'c']]
a[-1][1]
다. 리스트 연산
- 문자열과 마찬가지로 리스트에서도 기본적인 산술연산이 가능하다.
라. 리스트 수정, 삭제
1) 수정: 리스트명[수정할 인덱스번호] = "수정할 값"
2) 삭제: del 리스트명[삭제할 인덱스 번호]
3) 추가는 메서드를 사용해야 해서 라.에서 설명하겠다.
라. 리스트 조작하기(리스트 method)
리스트도 문자열과 마찬가지로 다양한 메서드(method)를 제공한다.
자주 사용하는 method를 하나씩 사용해보도록 하자.
참고로 method는 "적용할 객체".method() 형태로 사용하며 연결해서 사용하는 메서드 체이닝도 가능하다.
1) 요소 추가하기
- append(요소/리스트): 리스트 끝에 요소/리스트 하나를 추가
※ append를 쓰면 리스트의 len은 1씩 증가한다.
- extend(리스트): 리스트 끝에 다른 리스트를 연결하여 확장
※ extend를 쓰면 리스트의 len은 입력한 리스트의 길이만큼 증가한다.
- insert(인덱스, 요소): 리스트의 특정 인덱스에 요소 하나를 추가
insert(0, 요소) # 리스트의 맨 처음에 요소를 추가
insert(len(리스트), 요소) # 리스트 끝에 요소를 추가
2) 요소 삭제하기
- pop(인덱스): 마지막 요소 또는 특정 인덱스의 요소를 삭제, 아무것도 입력하지 않으면 마지막 요소
- remove(값): 특정 값을 찾아서 삭제
3) 리스트에서 특정 값의 인덱스 구하기
- index(값): 리스트에서 특정 값의 인덱스를 출력함
4) 특정 값의 개수 구하기
- count(값)
5) 리스트 순서 뒤집기
- reverse()
- 또는 리스트명[::-1]
6) 리스트 정렬하기
- sort() 또는 sort(reverse=False): 리스트의 값을 작은 순서대로 정렬(오름차순)
- sort(reverse=True): 리스트의 값을 큰 순서대로 정렬(내림차순)
🖊️sorted
정렬해주는 파이썬 내장함수 (메서드 아님)
sort는 리스트의 내용을 변경하여 정렬하지만, sorted는 정렬된 새 리스트를 생성한다.
7) 리스트의 모든 요소를 삭제하기
- clear()
마. 리스트 컴프리헨션
참고로 [ ]을 쓰면 리스트 컴프리헨션, ( )을 쓰면 set 컴프리헨션이다.
5. 튜플
가. 튜플 생성하기
- 튜플명 = (값1, 값2, 값3, ...)
- 튜플명 = 값1, 값2, 값3
- 튜플명 = tuple(값1, 값2, ...)
range를 활용하여 만들 수도 있다.
- 튜플 = tuple(range(시작, 끝, 증가폭))
나. 리스트와 튜플의 차이점
1) 리스트 [], 튜플 ()
2) 리스트는 요소 값 생성, 삭제, 수정 가능하지만 튜플은 불가능하다.
참고로 튜플을 리스트로 만들고, 리스트를 튜플로 만드는 것도 가능하다.
다. 튜플 다루기
1) 인덱싱
2) 슬라이싱
3) 튜플 더하기
4) 튜플 길이구하기(len)
5) min, max, sum
라. 튜플 메서드
1) 튜플에서 특정 값의 인덱스 번호 구하기
- index(값): 입력한 값이 있는 인덱스 번호 반환
2) 특정 값의 개수 구하기
- count(값)
마. 튜플 컴프리헨션
- tuple(식 for 변수 in 리스트 if 조건식)
6. 시퀀스 자료형
리스트, 튜플, range, 문자열을 시퀀스(연속적) 자료형이라고 한다.
이들은 몇가지 공통점이 있다.
가. 특정 값이 있는지 확인하기
- 값 in 시퀀스객체
- 값 not in 시퀀스객체
나. 시퀀스 객체 연결하기
+ 연산자를 사용하여 객체를 서로 연결할 수 있다. (시퀀스 객체1 +시퀀스 객체2)
단, range는 + 연산자로 객체를 연결할 수 없다.
이 경우에는 range를 리스트나 튜플로 만들어서 연결하면된다.
list(range(10)) + list(range(5))
다. 시퀀스 객체 반복하기
- 시퀀스 객체 * 정수
- 정수 * 시퀀스 객체
라. len
리스트와 튜플에 len을 사용하여 길이를 구할 수 있다.
7. 딕셔너리(dic)
가. 생성하기
- 딕셔너리명 = {키1: 값1, 키2: 값2}
※ 생성 시 주의사항
1) key값은 고유한 값이다. (하나를 설정해두면, 그 외 나머지 것들은 모두 무시된다.)
2) key 값에 list를 사용할 수 없다.
나. 딕셔너리 추가, 삭제
딕셔너리는 key값을 사용해 value 값에 접근한다.
book = {"미녀":"야수"}
book["로미오"] = "줄리엣"
book = {"미녀":"야수", "로미오":"백설공주"}
del book["로미오"]
다. 딕셔너리 관련 함수들
1) 딕셔너리명.keys(): key리스트 만들기
2) 딕셔너리명.values(): value리스트 만들기
3) 딕셔너리명.items(): key, value 쌍 얻기
4) 딕셔너리명.clear(): key:value 쌍 모두 지우기(빈 딕셔너리가 된다.)
5) 딕셔너리명.get("key"): key로 value값 얻기(value 값이 호출된다.)
6) 찾고싶은 key in 딕셔너리명: 해당 key가 딕셔너리 안에 있는지 조사하기
8. 집합(set) 자료형
가. 생성하기
- 집합명 = set(요소1, 요소2, ...)
나. 집합형 자료의 특징
- 중복을 허용하지 않는다.
- 순서가 없다. (= 슬라이싱이 불가능하다.)
※ 딕셔너리 역시 순서가 없는 자료형으로 슬라이싱이 불가능하다.
Q. 만약 집합자료형에서 인덱싱을 하고 싶다면?
A. 리스트나 튜플로 먼저 변환하고 인덱싱을 한다.
#리스트로 변환 후 인덱싱
s1 = set([1,2,3])
l1 = list(s1)
l1[0]
'1'
#튜플로 변환 후 인덱싱
t1 = tuple(s1)
t1[0]
'1'
다. 교집합, 합집합, 차집합
1) 집합1 | 집합2: 합집합
2-1) 집합1 & 집합2: 교집합
2-2) 집합1.intersection(집합2): 교집합
3-1) 집합1 - 집합2: 차집합
3-2) 집합1.difference(집합2): 차집합
라. 집합자료형 관련 함수들
1) 집합명.add(): 값 1개 추가하기
2) 집합명.update(): 값 여러개 추가하기
3) 집합명.remove(제거할 값): 특정 값 제거하기
9. 불(bool) 자료형
가. 정의
- 참(True)과 거짓(False)를 나타내는 자료형
※ True == 1, False == 2
※ 파이썬은 대/소문자를 구분하는 언어이다. 첫글자는 무조건 대문자, 나머지는 소문자로 적어야 한다.
나. 자료형의 참과 거짓
- 문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어있으면 거짓이다. 반대로 비어있지 않으면 참이다.
- 숫자는 0일 때 거짓이다. 0이 아니면 참이다
- None은 거짓을 의미한다.
'Python > 개념정리' 카테고리의 다른 글
[Python] 7. 웹스크래핑(1) - 기본개념, 주의사항 (0) | 2022.10.30 |
---|---|
[Python] 5. EDA(2) - 직접구하기(수치형 데이터) (0) | 2022.10.26 |
[Python] 4. EDA(1) - pandas profiling, sweetviz, autoviz (0) | 2022.10.26 |
[Python] 3. 함수 (0) | 2022.10.26 |
[Python] 2. 제어문(조건문, 반복문) (1) | 2022.10.26 |
댓글