[Python] 1.3 튜플(Tuple) & 딕셔너리(Dict) & 집합(Set)

튜플(tuple) 자료형


튜플은 리스트와 비슷하지만 차이점이 있다

  • 튜플은 한 번 선언된 값을 변경할 수 없다.
  • 소괄호를 이용한다
a = (1, 2, 3, 4)
print(a)
>>> (1, 2, 3, 4)
a[2] = 7
>>> "TypeError: 'tuple' object does not support item assignment"

튜플 자료형은 그래프의 알고리즘을 구현할 때 자주 사용된다.

다익스트라(Dijkstra) 최단 경로 알고리즘처럼 최단 경로를 찾아주는 알고리즘 내부에서는 우선순위 큐를 이용하는데 해당 알고리즘에서 우선순위 큐에 한 번 들어간 값은 변경되지 않는다.

자신이 알고리즘을 잘못 작성함으로써 변경하면 안되는 값이 변경되고 있지는 않은지 체크할 수 있다.

튜플은 리스트에 비해 공간 효율적이다.

일반적으로 각 원소의 성질이 서로 다를 때 주로 사용한다.

다익스트라의 경우 “비용”과 “노드 번호” 라는 서로 다른 성질의 데이터를 (비용, 노드번호)의 형태로 묶어서 관리하는 것이 국룰이다.

사전(Dictionary) 자료형


키(Key), 값(Value)의 쌍을 데이터로 가지는 자료형이다.

파이썬의 사전 자료형은 내부적으로 해시 테이블(Hash Table)을 이요하므로 데이터의 검색 및 수정에 있어서 O(1)의 시간에 처리한다.

키-값 쌍으로 구성된 데이터를 처리함에 있어서 리스트보다 훨~씬 빠르다는 점이 중요하다.

data = dict()
data['사과'] = 'apple'
data['바나나'] = 'banana'
print(data)
>>> {'사과': 'apple', '바나나': 'banana'}

언제 사전 자료형이 유용한가?

→ 1~10,000,000 범위의 번호를 갖는 학생이 있고, 100명을 선택한다고 가정한다. 크기100의 dictonary를 만들기 vs 크기10,000,000의 리스트 만들기

사전자료형은 데이터 1000만 개를 담을 필요가 없기 때문에 훨씬 적은 메모리 공간을 사용할 수 있음.

if '사과 in data:     # in을 사용해 데이터 존재여부 판별

파이썬에서 리스트, 문자열, 튜플 등 순차적인 정보를 담는 자료형을 iterable 자료형이라고 한다. in은 모든 interable자료형에 사용이 가능하다.

사전 자료형 관련 메서드


키, 값을 별도로 뽑아내기 위한 함수 등

data = dict()
data['삼성전자'] = '90000'
data['SK하이닉스'] = '150000'
data['현대차'] = '250000'

# keys(): 키 데이터만 담은 리스트 반환
key_list = data.keys()
# values(): 값 데이터만 담은 리스트 반환
value_list = data.values()

집합(Set) 자료형


집합의 특성(중요)

  • 중복을 허용하지 않는다.
  • 순서가 없다.

순서가 없다는 특성 때문에 리스트와 튜플과 다르게 인덱싱이 되지 않는다.

집합 자료형에는 key가 존재하지 않고 값 데이터만 담게 된다.

특정 원소가 존재하는지 검사하는 연산의 시간 복잡도는 O(1)이다. 사전자료형과 같다.

# 초기화 방법 1: set()
data = set([1, 1, 2, 3, 4, 4, 5, 5])
print(data)
>>> {1, 2, 3, 4, 5}

# 방법 2: 중괄호
data = {1, 2, 3, 3, 4, 4, 4, 5}
print(data)
>>> {1, 2, 3, 4, 5}

집합 자료형의 연산


집합연산이므로 합집합, 교집합, 차집합 등 집합연산이 가능하다.

a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])

# 합집합: |
print(a | b)
>>> {1, 2, 3, 4, 5, 6, 7}

# 교집합: &
print(a & b)
>>> {3, 4, 5}

# 차집합: -
print(a - b)
>>> {1, 2}

집합 자료형 관련 메서드


data = set([1, 2, 3])

# 값을 추가: add()
data.add(4)
print(data)
>>> {1, 2, 3, 4}

# 값을 여러개 추가: update()
data.update([5, 6])
print(data)
>>> {1, 2, 3, 4, 5, 6}

# 해당 값을 삭제: remove()
data.remove(3)
print(data)
>>> {1, 2, 4, 5, 6}