본문 바로가기
Python/Python FAQ

Python 전치 / 압축 해제 기능 (zip의 역함수)?, Transpose/Unzip Function (inverse of zip)?

by 베타코드 2023. 9. 12.
반응형

질문


나는 2개의 항목을 가진 튜플 목록이 있으며, 이를 첫 번째 항목을 포함하는 첫 번째 목록과 두 번째 항목을 포함하는 두 번째 목록으로 변환하고 싶습니다.

예를 들어:

original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# 그리고 나는 다음과 같이 되기를 원합니다...
result = (['a', 'b', 'c', 'd'], [1, 2, 3, 4])

이를 수행하는 내장 함수가 있을까요?


답변


2.x에서는 zip이 자체적으로 역함수입니다! 특별한 * 연산자를 사용하면 됩니다.

>>> zip(*[('a', 1), ('b', 2), ('c', 3), ('d', 4)])
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)]

이는 리스트의 각 요소를 별도의 인수로 사용하여 zip을 호출하는 것과 동일합니다:

zip(('a', 1), ('b', 2), ('c', 3), ('d', 4))

단, 인수는 튜플로 변환된 후에 직접 zip에 전달되므로 인수의 수가 너무 커지는 것에 대해 걱정할 필요가 없습니다.

3.x에서는 zip게으른 이터레이터를 반환하지만, 이는 간단히 변환할 수 있습니다:

>>> list(zip(*[('a', 1), ('b', 2), ('c', 3), ('d', 4)]))
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)]
반응형

댓글