列出组合的所有组合

时间:2016-02-10 05:15:58

标签: python

让我们说每组中有 3组,其中包含2个元素,我想从每组中取一个元素。

我知道总共有2^3 = 8种组合,在python中列出所有可能组合的高效算法是什么?

1 个答案:

答案 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)

请记住,这会返回一个可迭代的生成器,这意味着如果要将它们存储在某个位置,则需要将其转换为列表。如果您只需要一次,请不要打扰。