我有一个看起来像这样的数组:
arrays = [['a', 'b'], [1, 2], ['x', 'y', 'z']]
但也可以扩展。
我需要以所有可能的组合(my_function(a_or_b, one_or_two, x_y_or_x)
,a 1 x
,a 2 x
,a 1 y
等)将它们提供给a 1 z
。可以使用numpy。
尽管它看起来很简单,但我不知道从哪里开始...
是的,我可以像这样循环播放:
for array in arrays:
for ...
然后呢?遍历数组意味着在我的第二次迭代arrays[0]
上不再是第一个迭代,我会弄乱顺序。我也会重复。
我该怎么做?我不在乎这些函数的调用顺序,但是我在乎它们不会以相同的组合被两次调用并且参数是按顺序排列的。
my_function(a, 1, x)
my_function(b, 1, x)
my_function(a, 2, x)
my_function(b, 2, x)
my_function(a, 1, y)
my_function(b, 1, y)
my_function(a, 2, y)
ecc...
答案 0 :(得分:4)
itertools.product
正是这样做的。它将从您的3个子列表中生成所有组合。然后,您可以在函数中将它们作为参数解压缩:
from itertools import product
combs = product(*arrays)
for comb in combs:
my_function(*comb)
通话
my_function('a', 1, 'x')
my_function('a', 1, 'y')
my_function('a', 1, 'z')
my_function('a', 2, 'x')
my_function('a', 2, 'y')
my_function('a', 2, 'z')
my_function('b', 1, 'x')
my_function('b', 1, 'y')
my_function('b', 1, 'z')
my_function('b', 2, 'x')
my_function('b', 2, 'y')
my_function('b', 2, 'z')