10.22 파이썬 컬렉션 타입

1. 파이썬 컬렉션 타입 - 리스트

리스트는 여러 값을 순서대로 저장하며 변경이 가능하다.

li1 = [1, 3, 5, 7, 9]
print(li1)            # [1, 3, 5, 7, 9]
print(type(li1))      # <class 'list'>

리스트는 다양한 타입을 함께 담을 수 있다.

li2 = list("python")
print(li2)            # ['p', 'y', 't', 'h', 'o', 'n']

li3 = [10, 3.14, "abc", True]
print(li3)            # [10, 3.14, 'abc', True]
print(type(li3[0]))   # <class 'int'>
print(type(li3[1]))   # <class 'float'>
print(type(li3[2]))   # <class 'str'>
print(type(li3[3]))   # <class 'bool'>

인덱싱과 슬라이싱을 지원한다.

li1 = [10, 20, 30, 40, 50]
print(li1[0])         # 10
print(li1[-1])        # 50
print(li1[1:4])       # [20, 30, 40]
print(li1[:3])        # [10, 20, 30]
print(li1[::2])       # [10, 30, 50]
print(li1[::-1])      # [50, 40, 30, 20, 10]

슬라이스 대입으로 여러 요소를 한 번에 교체할 수 있다.

li4 = [10, 20, 30, 40, 50]
li4[1:2] = ['😁', '😂', '😎', '😍']
print(li4)            # [10, '😁', '😂', '😎', '😍', 30, 40, 50]

li4 = [10, 20, 30, 40, 50]
del li4[1]
print(li4)            # [10, 30, 40, 50]

결합과 반복 연산을 사용할 수 있다.

li5 = [10, 20, 30]
li6 = [40, 50, 60]
print(li5 + li6)      # [10, 20, 30, 40, 50, 60]
print(li5 * 2)        # [10, 20, 30, 10, 20, 30]

li5 = [10, 20, 30]
li6 = li5 + [40, 50, 60]
print(li6)            # [10, 20, 30, 40, 50, 60]

정렬과 뒤집기를 제공한다.

li7 = [3, 1, 2]
li7.sort()
print(li7)            # [1, 2, 3]
li7.reverse()
print(li7)            # [3, 2, 1]

요약: 순서가 있고 변경 가능한 시퀀스로, 인덱싱·슬라이싱·슬라이스 대입·정렬 등 기본 연산을 지원한다.

2. 파이썬 컬렉션 타입 - 튜플

튜플은 순서가 있으나 변경할 수 없다.

tu1 = ()
print(tu1)            # ()
print(type(tu1))      # <class 'tuple'>

tu1 = (1,)
print(type(tu1))      # <class 'tuple'>

인덱싱과 슬라이싱을 지원한다.

tu2 = (10, 20, 30)
print(tu2[0])         # 10
print(tu2[-1])        # 30
print(tu2[1:3])       # (20, 30)

불변이므로 새 튜플을 만들어 확장한다.

tu3 = (1, 2, 3)
tu3 = tu3 + (4,)
print(tu3)            # (1, 2, 3, 4)

단일 요소 튜플은 쉼표가 필요하다.

x = (5,)
print(type(x))        # <class 'tuple'>

y = (5)
print(type(y))        # <class 'int'>

요약: 순서가 있으나 변경이 불가능하며, 필요 시 새 튜플로 재구성한다.

3. 파이썬 컬렉션 타입 - 딕셔너리

딕셔너리는 키-값 쌍을 저장한다.

dic1 = {}
print(dic1)           # {}
print(type(dic1))     # <class 'dict'>

dic2 = {'userid': 'user01', 'hp': '010-1111-1111'}
print(dic2)           # {'userid': 'user01', 'hp': '010-1111-1111'}

dic3 = dict(userid='user02', hp='010-2222-2222')
print(dic3)           # {'userid': 'user02', 'hp': '010-2222-2222'}
print(dic3['userid']) # 'user02'
print(dic3['hp'])     # '010-2222-2222'

추가·변경·삭제를 지원한다.

dic4 = {1: 'apple'}
print(dic4)           # {1: 'apple'}

dic4[100] = 'banana'       # 추가
print(dic4)           # {1: 'apple', 100: 'banana'}

dic4[50] = 'melon'         # 추가
print(dic4)           # {1: 'apple', 100: 'banana', 50: 'melon'}

del dic4[100]              # 삭제
print(dic4)           # {1: 'apple', 50: 'melon'}

키, 값, 항목을 조회한다.

print(dic4.keys())    # dict_keys([1, 50])
print(dic4.values())  # dict_values(['apple', 'melon'])
print(dic4.items())   # dict_items([(1, 'apple'), (50, 'melon')])

안전 조회는 get()을 사용한다.

print(dic4.get(1))         # 'apple'
print(dic4.get(999))       # None
print(dic4.get(999, 'NA')) # 'NA'

요약: 키를 통해 값을 저장·검색하며, 추가·변경·삭제와 키/값/항목 조회가 가능하다.

4. 파이썬 컬렉션 타입 - 세트

세트는 중복 없는 값을 저장하며 순서를 보장하지 않는다.

s1 = {}  # 값이 없으면 딕셔너리로 인식
print(type(s1))       # <class 'dict'>

s2 = set()
print(type(s2))       # <class 'set'>

li6 = [1, 3, 5, 7, 7, 10, 7]
print(li6)            # [1, 3, 5, 7, 7, 10, 7]
s6 = set(li6)
print(s6)             # {1, 3, 5, 7, 10}
print(list(s6))       # [1, 3, 5, 7, 10]  (순서는 임의)

요소 추가·삭제 및 집합 연산을 지원한다.

s1 = {1, 3, 5, 7}
print(s1)             # {1, 3, 5, 7}

s1.add(2)
print(s1)             # {1, 2, 3, 5, 7}

s1.add(4)
print(s1)             # {1, 2, 3, 4, 5, 7}

s1.add(7)             # 중복 추가 무시
print(s1)             # {1, 2, 3, 4, 5, 7}

집합 연산 예시:

A = {1, 2, 3}
B = {3, 4, 5}

print(A | B)          # {1, 2, 3, 4, 5}
print(A & B)          # {3}
print(A - B)          # {1, 2}
print(B - A)          # {4, 5}

요약: 중복 없는 원소의 모음으로, 포함 검사와 집합 연산에 적합하다.