在给定长度内获得True和False的组合

时间:2017-12-03 13:47:51

标签: python

我想在 n 长度中得到真/假的组合(顺序无关紧要)。

因此,如果长度为3,结果将是: [[True, True, True], [True, True, False], [True, False, False], [False, False, False]]

如果它是2,那么结果将是:

[[True, True], [True, False], [False, False]]

我该怎么做?我尝试使用itertools.product,但它也列出了例如[True, False][False, True],而它应该只生成其中一个(因此切换数组中元素的顺序不会导致结果重复)。

3 个答案:

答案 0 :(得分:2)

我没有看到使用itertools实现这一目标的简单方法。

这是一个简单的解决方案

def combinations(n):
    return [[True] * k + [False] * (n - k) for k in range(n + 1)]

答案 1 :(得分:1)

你可以得到这样的结果:

import itertools

def combination(list_,n):
    sub_result=(itertools.product(list_, repeat=n))
    return set([tuple(sorted(k)) for k in sub_result])

print(combination([True,False],3))

Test_case 1:

,n = 2:

{(False, True), (False, False), (True, True)}

test_case 2:

,n = 3:

{(False, True, True), (True, True, True), (False, False, False), (False, False, True)}

答案 2 :(得分:0)

您需要itertools.product,假设您想要的是各种组合:

>>> import itertools
>>> list(itertools.product([True,False], repeat=2))
[(True, True), (True, False), (False, True), (False, False)]
>>> list(itertools.product([True,False], repeat=3))
[(True, True, True),
 (True, True, False),
 (True, False, True),
 (True, False, False),
 (False, True, True),
 (False, True, False),
 (False, False, True), (False, False, False)]