Python 获取给定长度内的True和False组合
我想得到n个长度的真/假组合(顺序无关紧要) 因此,如果长度为3,结果将是:Python 获取给定长度内的True和False组合,python,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],而它应该只制作其中一个(这样切换数组中
[[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]
,而它应该只制作其中一个(这样切换数组中元素的顺序就不会导致重复)。如果输出数组中的顺序确实重要:
您需要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)]
我看不到用itertools实现这一点的简单方法 这里有一个简单的解决方案
def combinations(n):
return [[True] * k + [False] * (n - k) for k in range(n + 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))
测试用例1:
n=2时:
{(False, True), (False, False), (True, True)}
测试用例2:
n=3时:
{(False, True, True), (True, True, True), (False, False, False), (False, False, True)}
好的,现在我们知道了您的预期输出,您尝试的代码有什么问题?这没有提供足够的信息来回答。你在做什么?请提供一些你的代码样本…请添加你已经尝试过的代码。你有你的解决方案吗?这显然不是OP想要的。第一句解释了“顺序无关紧要”,并且您的两个输出都不符合OP的期望。我喜欢这个解决方案,因为我正在寻找一种顺序确实重要的方法。