Python 不同数组项的所有可能组合

Python 不同数组项的所有可能组合,python,arrays,algorithm,combinations,Python,Arrays,Algorithm,Combinations,我有这样的阵列: [[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?您需要笛卡尔积 由于列表的存储方式有点模棱两可: >>> x,y,z = arrays >

我有这样的阵列:

[[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?

您需要笛卡尔积

由于列表的存储方式有点模棱两可:

>>> 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]
你想要笛卡尔积

由于列表的存储方式有点模棱两可:

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

我尝试过置换,但它只对可散列元素有效(例如数字),而对数组无效。你不需要置换,你需要的是乘积。@Cheetah不,就是笛卡尔乘积。我尝试过置换,但它只对可散列元素有效(例如数字),对于数组,它不起作用。你不需要排列,你需要的是乘积。@Cheetah不,是笛卡尔积。