笛卡尔产品重复

时间:2016-07-19 13:01:47

标签: python python-3.x combinatorics

所以我想创建一个带正整数 n 的函数,并返回一堆 n-tuples ,其中包含所有可能的组合{ {1}},例如:

True/False (1/0)

我的代码是:

f(1) = (0,),(1,)


f(2) = (0, 0), (0, 1), (1, 0), (1, 1)

我听说python在递归方面不是很好,一般觉得这不是有效的解决方案。

似乎使用了一个给定数字范围的powerset(powerset的配方来自def fill(n: int) -> Tuple[Tuple[int]]: if n == 1: return (0,),(1,) return tuple((i + j) for i in fill(n-1) for j in fill(1)) 模块),然后使用某种Indicator function就可以做到这一点。

itertools

然而,对于一个非常基本的东西来说似乎太过分了。 有没有更好的方法呢?

1 个答案:

答案 0 :(得分:8)

你描述的不是一个powerset而是一个重复的笛卡尔产品。使用itertools.product

import itertools
def fill(n):
    return itertools.product((0,1), repeat=n)

print(list(fill(3)))

# [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]