파이썬
[파이썬(Python)] 자료형 - 튜플(Tuple), 집합(Set), 딕셔너리(Dictionary)
진저본
2022. 10. 14. 10:45
- 튜플 (Tuple)
()으로 튜플을 생성할 수 있다.
Immutable: 값을 바꿀 수 없음 = 수정 불가
-> 여러 개의 데이터를 묶어서 한번에 전송할 때 사용됨
튜플의 요솟값은 삭제 및 변경이 불가하다.
하지만 iterable하므로 인덱싱, 슬라이싱 등은 가능하다.
# Indexing
a = (1, 2, 'a', 'b')
>>> a[1]
2
# Slicing
>>> a[2:]
('a', 'b')
리스트처럼 더하기 곱하기 등이 된다. 인덱싱 개념으로 생각하면 됨.
a = (1, 2, 3)
b = (1, 2)
>>> a + b
(1, 2, 3, 1, 2)
>>> a * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
관련 함수
수정이 불가능하므로 리스트의 append, remove 등과 같이 mutable한 속성을 갖는 함수는 사용이 불가능하고, index, count 등 iterable한 속성을 갖는 함수는 사용이 가능하다.
관련 함수를 알고 싶으면 dir(tuple)을 실행해보면 된다.
- 집합 (Set)
{ } 로 생성, 단 a = {}처럼 생성시 딕셔너리가 된다.
Mutable: 수정/삭제/추가 가능
Non-iterable: 순서가 없다 -> 인덱싱/슬라이싱이 안된다.
숫자같은 경우 자동 정렬이 되어서 나오긴 하는데, 문자는 랜덤하게 나온다. Set은 순서가 없다는 것을 기억해야 한다.
자료형보다 그냥 중학교 때 배우는 집합으로 생각하면 편하다.
a = {4, 3, 8}
>>> a
{3, 4, 8}
그러면 집합이니까 중복되는 요소가 있으면 자동으로 없애주나? -> 맞다. 중복을 허용하지 않는다.
a = {1, 2, 3, 3, 2}
>>> a
{1, 2, 3}
관련 함수
tuple과 반대로 mutable한 속성의 함수는 사용 가능, iterable한 속성의 함수는 사용할 수 없다.
# Add
a = {1, 2, 4}
a.add(3)
>>> a
{1, 2, 3, 4}
# Update
a.update([7, 8, 9]) # 리스트나 튜플로 묶어도 되고 집합으로 묶어도 당연히 된다.
>>> a
{1, 2, 3, 4, 7, 8, 9}
# Remove
a.remove(8)
>>> a
{1, 2, 3, 4, 7, 9}
교집합, 차집합, 합집합
중학교 과정의 그 집합 맞다. 똑같이 적용된다.
교집합 = AND 연산
합집합 = OR 연산
으로 생각해도 편하다.
s1 = {1, 3, 4, 8, 9}
s2 = {2, 3, 5, 7, 8}
# 교집합 (& 이나 .intersection())
>>> s1 & s2
{3, 8}
>>> s1.intersection(s2)
{3, 8}
# 합집합 (|(Shift + \) 이나 .union())
>>> s1 | s2
{1, 2, 3, 4, 5, 7, 8, 9}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 7, 8, 9}
# 차집합 ( - 이나 difference())
>>> s1 - s2
{1, 4, 9}
>>> s2 - s1
{2, 5, 7}
>>> s1.difference(s2)
{1, 4, 9}
- 딕셔너리 (Dictionary)
딕셔너리는 기본적으로 Set type이다. -> Set의 속성을 갖는다. 즉, mutable & non-iterable(순서가 없고, 변경 가능)
{ Key: Value } 로 생성, 이 때 Key는 문자도 되고 숫자도 된다. 단, key는 고유한, unique한 값이므로 변경이 가능한 리스트나 딕셔너리 등은 key로 설정할 수 없다.
Value에는 모든 값이 올 수 있다. 딕셔너리나 리스트 등도 당연히 가능
순서가 없으므로 value를 호출할 때 key값을 이용한다.
d = {'생강': 'ginger', '젤리': 'jelly', 'delicious': '맛있다'}
>>> d['생강']
'ginger'
값 추가하기
딕셔너리[key] = value로 요소를 추가할 수 있다. 단, key값은 중복될 수 없다. 중복될 경우 먼저 있던 key: value가 없어진다.
d = {0: 'g', 1: 'i', 2: 'n'}
d[3] = 'g'
>>> d
{0: 'g', 1: 'i', 2: 'n', 3: 'g'}
관련 함수
# Key들만 추출하기 .keys()
a = {'name': 'gingerbon', 'age': 25, 'favorite': 'jelly'}
>>> a.keys()
dict_keys(['name', 'age', 'favorite']) # 주의: 결과물은 list 타입이 아니라 'dict_keys' 타입이다. 리스트와 유사하게 사용할 수 있지만, 리스트 관련 함수(append, insert 등)는 사용 불가하다.
# Value들만 추출하기 .values()
>>> a.values()
dict_values(['gingerbon', 25, 'jelly'])
# Key, Value 쌍 얻기 .items()
>>> a.items()
dict_items([('name', 'gingerbon'), ('age', 25), ('favorite', 'jelly')])
# Key:Value 쌍 모두 지우기 .clear()
>>> a.clear()
{} # 빈 딕셔너리
# Key로 Value 얻기 .get(key) == 딕셔너리[key]
b = {'생강': 'ginger', '젤리': 'jelly'}
>>> b.get('생강')
'ginger'
>>> b.get('쩰리')
None # 해당하는 key값이 없다면 None을 돌려주는게 딕셔너리[key]와의 차이다.
>>> b.get('생강젤리', 'gingerbon') # .get(key, default)
'gingerbon' # 딕셔너리 안에 해당하는 key값이 없을 경우 default값을 None대신 출력해준다.
# in: 안에 있는지 조사하기 -> 리스트 등에도 사용가능
>>> '생강' in b
True
>>> '쩰리' in b
False
정리
Mutable(변경 가능한) | Iterable(순서가 있는) | |
문자열(String) | X | O |
리스트(List) | O | O |
튜플(Tuple) | X | O |
집합(Set) | O | X |
딕셔너리(Dictionary) | O | X |