[파이썬(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