반응형
질문
나는 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)]
반응형
댓글