파이썬에는 tuple을 사용하면 값으로 이뤄진 불변의 순서쌍을 만들어 내고, 가장 짧은 튜플은 딕셔너리의 키-값 쌍과 비슷하게 두 값으로 이뤄집니다.
*예시1
snack_calories = {
'감자칩': 140,
'팝콘': 80,
'땅콩': 190,
}
items = tuple(snack_calories.items())
print(items) #(('감자칩', 140), ('팝콘', 80), ('땅콩', 190))
*예시2(튜플에 있는 값은 숫자 인덱스 사용하여 접근 가능)
item = ('호박엿', '식혜')
first = item[0]
second = item[1]
print(first, '&', second) #호박엿 & 식혜
*예시3(튜플이 만들어지면 새 값을 대입해서 튜플 변경 없다)
pair = ('약과', '호박엿')
pair[0] = '타래과'
#Error
Traceback...
TypeError: 'tuple' object does not support item assignment
한 문장 안에서 여러 값 대입 가능
인덱스를 사용하는 것이 아닌 튜플을 두 변수 이름으로 이뤄진 튜플에 대입
item = ('호박엿', '식혜')
first, second = item #언패킹
print(first,'&', second) # 호박엿 & 식혜
시각적 잡음이 적다
리스트, 시퀀스, 이터러블 안에 여러 계층이 들어간 경우에도 사용 가능
임시 변수 사용 안해도 값을 맞 바꿀 수 있다.
*예시2: 비교하기(언패킹 이용x)
#임시 변수를 사용해서 list의 두 위치 변경
def bubble_sort(a):
for _ in range(len(a)):
for i in range(1, len(a)):
if a[i] < a[i-1]:
temp = a[i]
a[i] = a[i-1]
a[i-1] = temp
names = ['프레즐', '당근', '쑥갓', '베이컨']
bubble_sort(names)
print(names) #['당근', '베이컨', '쑥갓', '프레즐']
*예시2-1: 언패킹 이용
#언패킹 구문을 사용하여 한 줄로 두 인덱스가 가리키는 원소 바꾸기
# 언패킹 패턴(a[i-1]. a[i])을 통해 임시 튜플에 있는 값이 a[i-1], a[i]에 각각 저장이 된다.
def bubble_sort(a):
for _ in range(len(a)):
for i in range(1, len(a)):
if a[i] < a[i-1]:
a[i-1], a[i] = a[i], a[i-1] # 맞바꾸기
names = ['프레즐', '당근', '쑥갓', '베이컨']
bubble_sort(names)
print(names) #['당근', '베이컨', '쑥갓', '프레즐']
*예시1
# 언패킹 사용하지 않고 list에 대해 이터레이션 코드
snacks = [('베이컨', 350), ('도넛', 240), ('머핀', 190)]
for i in range(len(snacks)):
item = snacks[i]
name = item[0]
calories = item[1]
print(f'#{i+1}: {name} 은 {calories} 칼로리입니다.')
#결과
#1: 베이컨 은 350 칼로리입니다.
#2: 도넛 은 240 칼로리입니다.
#3: 머핀 은 190 칼로리입니다.
*예시2
#언패킹을 사용하기
#enumerate 내장 함수 이용
for rank, (name, calories) in enumerate(snacks, 1):
print(f'#{rank}: {name} 은 {calories} 칼로리입니다.')
#결과
#1: 베이컨 은 350 칼로리입니다.
#2: 도넛 은 240 칼로리입니다.
#3: 머핀 은 190 칼로리입니다.
코드가 짧고 이해가 쉽다
인덱스를 사용에 접근할 이유가 없다
언패킹 기능 제공
파이썬은 한 문장 안에서 여러 값을 대입하는 게 가능한 언패킹이라는 문법 제공
파이썬 언패킹은 모든 이터러블에 적용 가능
인덱스를 사용해 시퀀스 내부에 접근하는 대신 언패킹 사용하면 시각적 잡은 줄이고 코드 더 명확