在python

时间:2017-04-19 09:51:43

标签: python combinations cartesian-product

例如,我有这样的数组

[
  [1,2,3],
  [4],
  [5,6],
]

我想从上面的列表中生成所有组合,如果它看起来像这样。

[1, 4, 5]
[1, 4, 6]
[2, 4, 5]
[2, 4, 6]
[3, 4, 5]
[3, 4, 6]

3 个答案:

答案 0 :(得分:4)

听起来你想要内置product库中的itertools

>>> import itertools
>>> list(itertools.product([1, 2, 3], [4], [5, 6]))
[(1, 4, 5), (1, 4, 6), (2, 4, 5), (2, 4, 6), (3, 4, 5), (3, 4, 6)]
>>>
>>> columns = [[1,2,3],
               [4],
               [5,6]]
>>> list(itertools.product(*columns))
[(1, 4, 5), (1, 4, 6), (2, 4, 5), (2, 4, 6), (3, 4, 5), (3, 4, 6)]

答案 1 :(得分:1)

你走了:

a = [1,2,3]
b = [4]
c = [5,6]

d = [[x, y, z] for x in a for y in b for z in c]

答案 2 :(得分:0)

要制作笛卡尔积,您只需要在这种情况下迭代所有维度

例如:

for x in dimension_x:
    for y in dimension_y:
         for z in dimension_z:
             use the x,y,z

算法的复杂性总是很难(对于2个阵列 - > n2,对于3 - > n3,...,对于M - > n ^ M,其中n是最长阵列的长度)

请注意,您有重复项: (a,b)与(b,a)相同。因此,如果您不需要重复项,则可以更改算法以更快地运行。