让我们说每组中有 3组,其中包含2个元素,我想从每组中取一个元素。
我知道总共有2^3 = 8
种组合,在python中列出所有可能组合的高效算法是什么?
答案 0 :(得分:0)
简单! itertools.product将为您提供参数的笛卡尔积。
from itertools import product
a = [1, 2]
b = [3, 4]
c = [5, 6]
for combo in product(a, b, c):
print(combo)
输出:
(1, 3, 5)
(1, 3, 6)
(1, 4, 5)
(1, 4, 6)
(2, 3, 5)
(2, 3, 6)
(2, 4, 5)
(2, 4, 6)
这是itertools.product
的来源def product(*args, **kwds):
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
请记住,这会返回一个可迭代的生成器,这意味着如果要将它们存储在某个位置,则需要将其转换为列表。如果您只需要一次,请不要打扰。