자료형
파이썬의 자료형은 기본 자료형뿐만 아니라, 사전 자료형, 집합 자료형 등 다양한 자료형을 기본으로 내장하고 있어서 편리하다.
수 자료형(Number Datatype)
정수형(integer)
- 양의 정수
- 음의 정수
- 0
a = 1000 # 양의 정수
a = -1 # 음의 정수
a = 0 # 0
실수형(Real Number)
- 소수점 아래의 데이터를 포함하는 수 자료형
- e나 E를 이용하여 지수 표현 가능
- 1e9 : 10의 9제곱
a = 157.93 # 양의 실수
a = -157.93 # 음의 실수
a = 5. # 소수부가 0일 때 0을 생략
a = -.7 # 정수부가 0일 때 0을 생략
a = 1e9 # 10억의 지수 표현 방식
a = 75.25e1 # 752.5
a = 3954e-3 # 3.954
- 컴퓨터 시스템은 부동 소수점(floating-point) 방식을 이용
- 실수 자료형에는 4byte 혹은 8byte의 고정 메모리를 할당
- 실수를 2진수 데이터로 처리하므로, 오차가 발생 ▶ 0.3 + 0.6 = 0.8999999..
- 정확한 실수 표현을 위해 round 함수를 사용
# round(실수형데이터, 반올림하고자 하는 위치-1)
a = 0.3 + 0.6
print(a) # 0.899999999
print(round(a,4)) # 0.9 -> 소수점 5번째 자리에서 반올림
0.8999999999999999
0.9
수자료형의 연산
- 사칙연산(+, -, /, *)
- 나머지연산자(%), 몫연산자(//)
- 거듭제곱연산자(**)
a, b = 7, 3
print(a / b) # 나누기
print(a % b) # 나머지
print(a // b) # 몫
print(a ** b) # 거듭제곱
2.3333333333333335
1
2
343
리스트 자료형
- 파이썬 리스트 자료형 ▶ 연결 리스트 자료구조 ▶ append(), remove() 등의 메서드를 지원
- 리스트 대신에 배열 혹은 테이블이라고도 부른다.
리스트 만들기
- 대괄호 []를 이용하거나, list()를 이용하여 리스트를 선언하고, 원소를 추가하여 초기화
a = list() # 빈리스트 선언 1
a = [] # 빈리스트 선언 2
a = [1, 2, 3, 4, 5] # 리스트 선언하면서 원소 초기화
print(a) # [1, 2, 3, 4, 5]
print(a[4]) # 5
[1, 2, 3, 4, 5]
5
- 크기가 N이고 모든 값이 0인 1차원 리스트
n = 5
a = [0] * n # [0, 0, 0, 0, 0]
print(a)
[0, 0, 0, 0, 0]
리스트의 인덱싱과 슬라이싱
- 인덱싱 : 인덱스를 입력하여 특정한 원소에 접근하는 것
- 슬라이싱 : 연속적인 위치를 갖는 원소들을 가져오는 것
a = [1, 2, 3, 4, 5]
# 인덱싱
print(a[1]) # 2
print(a[-1]) # 5
# 슬라이싱
print(a[0:2]) # [1, 2] 슬라이싱의 마지막 숫자는 포함 안함
2
5
[1, 2]
리스트 컴프리헨션
- 리스트를 초기화하는 방법 중 하나
- 대괄호 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있다.
# 0부터 9까지 수 중 홀수만 포함하는 리스트
array = [i for i in range(10) if i % 2 == 1]
print(array) # [1, 3, 5, 7, 9]
# 1부터 9까지의 수의 제곱 값을 포함하는 리스트
array = [i * i for i in range(1,10)]
print(array)
[1, 3, 5, 7, 9]
[1, 4, 9, 16, 25, 36, 49, 64, 81]
- 리스트 컴프리헨션은 2차원 리스트를 초기화할 때 매우 효과적으로 이용됨
- N x M 크기의 2차원 리스트 초기화
n = 2
m = 3
array = [[0] * m for _ in range(n)]
print(array) # [[0, 0, 0],[0, 0, 0]]
[[0, 0, 0], [0, 0, 0]]
- 특정 크기의 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야 한다.
- 각각의 행들이 서로 같은 참조를 하지 않게 하기 위함 ▶ 1행이 변할 때, 2행도 같이 변하지 않게 하기 위함
리스트 관련 기타 메서드
- list.append() : 리스트 맨 끝에 원소 삽입, 시간 복잡도 O(1)
- list.sort(), list.sort(reverse=True) : 오름차순, 내림차순(reverse=True)으로 리스트 정렬, 시간 복잡도 O(NlogN)
- list.reverse() : 원소의 순서를 뒤집음, 시간 복잡도 O(N)
- list.insert(삽입할 위치 인덱스, 삽입할 값) : 특정 인덱스에 값 삽입(기존에 있던 값은 뒤로 밀림), 시간 복잡도 O(N)
- insert()는 원소 삽입뿐 아니라 원소 위치 조정도 해야해서 append()에 비해 시간복잡도가 크다.
- list.count(특정값) : 특정값을 갖는 원소 개수 카운트, 시간 복잡도 O(N)
- list.remove(특정값) : 특정값을 갖는 원소 중 1개를 제거, 시간 복잡도 O(N)
- 파이썬은 remove() 외에 특정값을 가지는 모든 원소를 제거하기 위한 함수가 없으므로 다음과 같이 작성해야 한다.
a = [1, 2, 3, 4]
remove_set = [2, 3]
# a의 원소 중 remove_set에 없는 원소만 result list에 추가
result = [i for i in a if i not in remove_set]
print(result) # [1, 4]
[1, 4]
문자열 자료형
문자열 초기화
- 문자열 변수 초기화는 큰따옴표("), 작은따옴표(')를 이용.
- 큰따옴표 안에 작은따옴표, 작은따옴표 안에 큰따옴표, 백슬래시()를 사용하면 따옴표 내부에 다른 따옴표를 표시할 수 있다.
문자열 연산
- 파이썬은 문자열에 대한 연산도 지원
a = "Hello"
b = "World"
print(a + " " + b) # Hello World
print(a * 3) # HelloHelloHello
print(a[1:4]) # ell
Hello World
HelloHelloHello
ell
튜플 자료형
- 튜플은 값 변경이 불가능 ▶ immutable (반면에 list는 mutable)
- () 소괄호 혹은 tuple()로 정의
t = tuple((1, 3, 4))
t
(1, 3, 4)
사전 자료형(Dictionary Datatype)
- 키(key)와 값(value)의 쌍을 데이터로 가지는 자료형
- 변경 불가능한 데이터를 키로 사용할 수 있다. (수 자료형, 문자열 자료형, 튜플 자료형)
- 순서가 없어 인덱싱, 슬라이싱이 불가능
- 파이썬 사전 자료형 ▶ '해시 테이블' 이용
- 데이터의 검색 및 수정: O(1)
data = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'
print(data)
{'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}
- in 연산자를 이용하여(iterable 자료형에 사용 가능), 사전 안의 특정 원소를 찾을 수 있다.
- iterable 자료형 ▶ 리스트, 튜플 같이 순차적인 정보를 담고 있는 자료형
# '원소 in 사전' 형태로 특정 원소를 찾을 수 있음
if '사과' in data:
print("True") # True - 사과가 dict 안에 있음
else:
print("False") # False - 사과가 dict 안에 없음
True
- 사전의 key와 value를 뽑기 위한 함수가 존재한다.
- keys() 함수 : 키 데이터만 뽑아 리스트로 이용
- values() 함수 : 값 데이터만 뽑아 리스트로 이용
key_list = data.keys()
value_list = data.values()
print(key_list)
print(value_list)
for key in key_list:
print(data[key])
dict_keys(['사과', '바나나', '코코넛'])
dict_values(['Apple', 'Banana', 'Coconut'])
Apple
Banana
Coconut
집합자료형
집합 자료형 소개
- 집합 자료형 set()
- 집합 자료형 set의 특징
- 중복을 허용하지 않는다.
- 순서가 없다.
- 순서가 없어서 인덱싱, 슬라이싱은 사용 불가능
- 집합 자료형은 key 없이, 단순히 value 데이터만 담는다.
- 데이터 검색 시간 복잡도: O(1)
- '특정한 데이터가 이미 등장한 적이 있는지 여부'를 체크할 때 매우 효과적
- set() 함수 또는 {} 중괄호를 이용하여 선언, 선언과 동시에 (,) 콤마를 이용하여 원소 초기화 가능
# set() 이용하여 초기화
data = set([1, 1, 2, 3, 4])
print(data)
# {} 중괄호 이용하여 초기화
data = {1, 1, 2, 3, 4}
print(data)
{1, 2, 3, 4}
{1, 2, 3, 4}
집합 자료형 연산
- 기본적인 집합 연산으로는 합집합, 교집합, 차집합 연산이 있다.
- 합집합 : ('|')
- 교집합 : ('&')
- 차집합 : ('-')
a = {1, 2, 3, 4, 5}
b = {1, 3, 5, 7, 9}
print(a | b) # 합집합
print(a & b) # 교집합
print(a - b) # 차집합
{1, 2, 3, 4, 5, 7, 9}
{1, 3, 5}
{2, 4}
집합 자료형 관련 함수
- add() : set에 하나의 값을 추가할 때
- update() : set에 여러 개의 값을 한꺼번에 추가할 때
- remove() : 특정값을 제거할 때
- add(), remove() 함수는 모두 시간 복잡도가 O(1)
data = {1, 2, 3}
print(data)
# 원소 추가
data.add(4)
print(data)
# 원소 여러 개 추가
data.update([5,6])
print(data)
# 특정 원소 삭제
data.remove(3)
print(data)