Python에서 튜플 또는 목록의 요소를 확장하고 여러 변수에 할당할 수 있습니다. 이것을 시퀀스 unpacking 또는 unpacked 할당이라고 합니다.
여기에는 다음 세부 정보가 설명되어 있습니다.
- 튜플과 리스트의 기초 풀기
- 중첩된 튜플, 압축 해제된 목록
- 밑줄로 압축 풀기:
_
- 별표로 포장 풀기:
*
별표를 사용하여 튜플, 목록 및 사전을 함수 인수로 확장하고 전달하는 방법에 대한 자세한 내용은 다음 문서를 참조하십시오.
튜플과 리스트의 기초 풀기
변수가 쉼표로 구분되어 왼쪽에 작성되면 각 변수에는 오른쪽에 있는 튜플 또는 목록의 요소가 할당됩니다. 튜플과 목록 모두 동일합니다(다음 예제는 튜플 형식으로 작성됨).
t = (0, 1, 2)
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# 2
l = [0, 1, 2]
a, b, c = l
print(a)
print(b)
print(c)
# 0
# 1
# 2
튜플은 대괄호를 생략할 수 있으므로 다음과 같이 한 줄의 여러 변수에 여러 값을 할당하는 데 사용할 수 있습니다.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
변수의 개수가 요소의 개수와 일치하지 않으면 오류가 발생합니다.
# a, b = t
# ValueError: too many values to unpack (expected 2)
# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)
변수의 수가 요소의 수보다 적은 경우 변수 이름에 별표를 추가하여 나머지 요소를 목록으로 할당할 수 있습니다(아래 참조).
중첩된 튜플, 압축 해제된 목록
중첩된 튜플과 목록도 압축을 풀 수 있습니다. 내용도 압축을 풀려면 다음 중 하나로 변수를 묶습니다.
()
[]
t = (0, 1, (2, 3, 4))
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)
print(type(c))
# <class 'tuple'>
a, b, (c, d, e) = t
print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4
_underscore_로 압축을 풉니다.
파이썬에서는 압축을 풀었을 뿐만 아니라 필요하지 않은 값은 관습적으로 밑줄(underscore) _에 할당합니다. 특별한 문법적 의미는 없습니다. 그들은 단순히 _라는 변수에 할당됩니다.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
별표로 포장 풀기
변수 수가 요소 수보다 적은 경우 변수 이름에 별표가 있으면 요소가 목록으로 함께 할당됩니다.
이 구문은 Python 3부터 구현되었으며 Python 2에서는 사용할 수 없습니다.
별표가 없는 변수는 처음부터 끝까지 요소를 할당하고 별표가 있는 변수에는 나머지 요소를 리스트로 할당한다.
t = (0, 1, 2, 3, 4)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]
print(type(c))
# <class 'list'>
a, *b, c = t
print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4
*a, b, c = t
print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4
예를 들어, 튜플이나 목록의 처음 두 요소만 변수에 할당하려는 경우 필요하지 않은 부분에 위의 밑줄을 사용할 수 있습니다.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
다음과 같이 동일하게 쓸 수도 있습니다.
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
별표는 하나만 첨부할 수 있습니다. 별표로 표시된 변수가 여러 개 있는 경우 각 변수에 할당된 요소 수를 결정할 수 없기 때문에 SyntaxError 오류가 발생합니다.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
별표로 표시된 변수에 할당된 단일 요소라도 목록으로 할당됩니다.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
추가 요소가 없으면 빈 목록이 할당됩니다.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []