반응형
질문
카테시안 곱(값들의 모든 가능한 조합)을 여러 개의 리스트 그룹에서 어떻게 얻을 수 있을까요?
예를 들어, 다음과 같이 주어졌을 때
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
어떻게 이를 얻을 수 있을까요?
[(1, 'a', 4), (1, 'a', 5), (1, 'b', 4), (1, 'b', 5), (2, 'a', 4), (2, 'a', 5), ...]
이 기술의 일반적인 응용 중 하나는 깊게 중첩된 루프를 피하는 것입니다. 더 구체적인 중복을 보려면 중첩된 for 루프 피하기를 참조하세요. 마찬가지로, 이 기술은 리스트 값을 가진 사전을 "펼치는" 데 사용될 수 있습니다. Python 사전 순열을 사전 목록으로 결합하기를 참조하세요.
동일한 리스트를 여러 번 자체와의 카테시안 곱을 원한다면, itertools.product
를 사용하면 우아하게 처리할 수 있습니다. 리스트의 모든 쌍에 대한 작업 또는 리스트의 "반복 순열"을 어떻게 얻을 수 있을까요?를 참조하세요.
itertools.product
에 대해 이미 알고 있는 많은 사람들은 입력 시퀀스마다 별도의 인수를 기대한다는 사실에 어려움을 겪습니다. 수락된 답변은 이를 *
로 처리하는 방법을 보여줍니다. 그러나 여기서 인수를 풀어서 사용하는 *
의 사용은 함수 호출에서 사용되는 다른 시간과 근본적으로 다르지 않습니다. 이 주제에 대해서는 튜플을 인수로 확장을 참조하세요(그리고 필요한 경우 이를 사용하여 중복 질문을 닫으세요).
답변
Python 2.6부터 사용 가능한 itertools.product
을(를) 사용하세요.
import itertools
somelists = [
[1, 2, 3],
['a', 'b'],
[4, 5]
]
for element in itertools.product(*somelists):
print(element)
이것은 다음과 동일합니다:
for element in itertools.product([1, 2, 3], ['a', 'b'], [4, 5]):
print(element)
반응형
댓글