获取给定列表长度的所有可能的布尔序列
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)
。方便的是,它们分别是 first 和 last 元素,所以我们可以简单地丢弃它们,使用 1[= 的切片28=]到-1.
对于不同长度的序列,只需更改itertools.product
函数的“repeat”可选参数即可。
给定一个随机列表长度,我怎样才能有效地获得所有可能的布尔值序列,除了全部为 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)
。方便的是,它们分别是 first 和 last 元素,所以我们可以简单地丢弃它们,使用 1[= 的切片28=]到-1.
对于不同长度的序列,只需更改itertools.product
函数的“repeat”可选参数即可。