获取给定列表长度的所有可能的布尔序列

Get all possible boolean sequences for a given list length

给定一个随机列表长度,我怎样才能有效地获得所有可能的布尔值序列,除了全部为 True 或全部为 False[=21 的字符串=]?

例如,给定数字 3,它应该 return 如下所示。

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

是否已经有一个已知的函数可以执行此操作?

它 return 序列的顺序并不重要。我主要只需要一些给定列表长度可能有多少个序列。

这更像是一道数学题,但这里是:

总选项数等于每个位置选项数的乘积,因此,如果您收到 3 作为输入:

index[0] could be true or false - 2
index[1] could be true or false - 2
index[2] could be true or false - 2
index has a total of 6 options.

您不需要函数来确定这一点。简单的数学就可以解决问题。

2**n - 2 

2 because there are only two options (True/False)
n is your list length
-2 because you want to exclude the all True and all False results

这主要是一道数学题,除非您需要序列本身。如果这样做,有一个简洁的 python 解决方案:

from itertools import product

[seq for seq in product((True, False), repeat=3)][1:-1]

列表理解将包含所有可能的序列,但我们不需要(True, True, True)(False, False, False)。方便的是,它们分别是 firstlast 元素,所以我们可以简单地丢弃它们,使用 1[= 的切片28=]到-1.

对于不同长度的序列,只需更改itertools.product函数的“repeat”可选参数即可。