Python에서 튜플 및 목록 압축 풀기(여러 변수에 확장 및 할당)

사업

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
# []