다음과 같은 배열이 있습니다.
[[1, 2], [3, 4]]
[[4, 5], [5, 6]]
[[7, 8], [8, 9]]
이 배열의 가능한 모든 조합을 얻고 싶습니다.
[[1, 2], [4, 5], [7, 8]]
[[1, 2], [4, 5], [8, 9]]
[[1, 2], [5, 6], [7, 8]]
...
배열 안에있는 배열의 개수에 제한이 없습니다.
Python으로 수행하려면 어떤 접근 방식을 사용해야합니까?
데카르트 곱을 원합니다 .
>>> arrays = [
... [[1, 2], [3, 4]],
... [[4, 5], [5, 6]],
... [[7, 8], [8, 9]],
... ]
>>> import itertools
>>> from pprint import pprint
>>> pprint(list(itertools.product(*arrays)))
[([1, 2], [4, 5], [7, 8]),
([1, 2], [4, 5], [8, 9]),
([1, 2], [5, 6], [7, 8]),
([1, 2], [5, 6], [8, 9]),
([3, 4], [4, 5], [7, 8]),
([3, 4], [4, 5], [8, 9]),
([3, 4], [5, 6], [7, 8]),
([3, 4], [5, 6], [8, 9])]
목록이 저장되는 방식이 약간 모호하기 때문에 :
>>> x,y,z = arrays
>>> x
[[1, 2], [3, 4]]
>>> y
[[4, 5], [5, 6]]
>>> z
[[7, 8], [8, 9]]
>>> pprint(list(itertools.product(x,y,z)))
[([1, 2], [4, 5], [7, 8]),
([1, 2], [4, 5], [8, 9]),
([1, 2], [5, 6], [7, 8]),
([1, 2], [5, 6], [8, 9]),
([3, 4], [4, 5], [7, 8]),
([3, 4], [4, 5], [8, 9]),
([3, 4], [5, 6], [7, 8]),
([3, 4], [5, 6], [8, 9])]
>>>
물론 itertools.product
중첩 된 for 루프와 동일합니다.
>>> for s1 in x:
... for s2 in y:
... for s3 in z:
... print(s1,s2,s3)
...
[1, 2] [4, 5] [7, 8]
[1, 2] [4, 5] [8, 9]
[1, 2] [5, 6] [7, 8]
[1, 2] [5, 6] [8, 9]
[3, 4] [4, 5] [7, 8]
[3, 4] [4, 5] [8, 9]
[3, 4] [5, 6] [7, 8]
[3, 4] [5, 6] [8, 9]
>>>
주의:
>>> for s in itertools.product(*arrays):
... print(*s)
...
[1, 2] [4, 5] [7, 8]
[1, 2] [4, 5] [8, 9]
[1, 2] [5, 6] [7, 8]
[1, 2] [5, 6] [8, 9]
[3, 4] [4, 5] [7, 8]
[3, 4] [4, 5] [8, 9]
[3, 4] [5, 6] [7, 8]
[3, 4] [5, 6] [8, 9]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다