例如,我有數組這樣生成陣列列的所有可能的組合在Python
[
[1,2,3],
[4],
[5,6],
]
我要生成從上面的列表,這是否應該是這個樣子的所有組合。
[1, 4, 5]
[1, 4, 6]
[2, 4, 5]
[2, 4, 6]
[3, 4, 5]
[3, 4, 6]
例如,我有數組這樣生成陣列列的所有可能的組合在Python
[
[1,2,3],
[4],
[5,6],
]
我要生成從上面的列表,這是否應該是這個樣子的所有組合。
[1, 4, 5]
[1, 4, 6]
[2, 4, 5]
[2, 4, 6]
[3, 4, 5]
[3, 4, 6]
>>> 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)]
在這裏你去:
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]
要進行笛卡爾乘積,你只需要在各個方面進行迭代在這種情況下,
例如:
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 R個M其中n是最長的陣列的長度)。
請注意,您有重複項: (a,b)與(b,a)相同。因此,如果您不需要重複項,則可以更改算法以加快工作速度。