如何计算数字/位数组的所有可能性(以python或任何语言表示)

Joh*_*ith 7 python arrays combinations

我连续3个小时都在绞尽脑汁,但我仍然没有得到它,所以我在这里问.(我在标题中写了Python,但这几乎可以用于任何语言)

假设我有一个固定长度为n的位数组(但也可能是定义范围内的整数),假设为5.

array=[0,1,1,0,0]
Run Code Online (Sandbox Code Playgroud)

现在,我如何生成所有数组,这些数组在数字范围内是可能的(在位数为2的情况下).

所以:

[0,0,0,0,0], [0,0,0,0,1], [0,0,0,1,0], [0,0,0,1,1] ...
Run Code Online (Sandbox Code Playgroud)

我试图在这里寻找解决方案,但我总能找到类似的东西,但这并不能解决我的问题.

为了解决这个问题,我尝试了各种循环,但是我总是不止一次获得一种可能性(不应该发生),或者没有获得所有可能的循环.

我可以设法使用if语句(检查组合是否已经存在),但这看起来非常简单.

是否有一个简单的方法,只使用循环,以获得所有可能性?

谢谢

编辑:由于这是在下面提到的,不,这不是功课.这是为了实现二进制状态的贝叶斯网络的研究.(开关).

Jun*_*uxx 15

在Python中,使用itertools来做这样的事情

from itertools import product
for i in product([0,1], repeat=5): 
    print i
Run Code Online (Sandbox Code Playgroud)

产量:

(0, 0, 0, 0, 0)
(0, 0, 0, 0, 1)
(0, 0, 0, 1, 0)
(0, 0, 0, 1, 1)
(0, 0, 1, 0, 0)
etc...
Run Code Online (Sandbox Code Playgroud)


Sea*_*son 5

我将通过从0到31(0b11111)循环并将二进制表示转换为固定长度的数组来解决此问题.

你没有用语言标记这个,所以我不知道如何给你示例代码,但这种方法应该有效.

1: 00001
2: 00010
3: 00011
...
30:11110
31:11111
Run Code Online (Sandbox Code Playgroud)

编辑:刚看到你用Python标记了这个问题.实现上述算法的示例python代码:

listLength=5
for x in range(0,2**listlength):
    print(list(bin(x)[2:].zfill(listlength)))
Run Code Online (Sandbox Code Playgroud)

打印出来:

['0', '0', '0', '0', '0']
['0', '0', '0', '0', '1']
['0', '0', '0', '1', '0']
['0', '0', '0', '1', '1']
['0', '0', '1', '0', '0']
['0', '0', '1', '0', '1']
['0', '0', '1', '1', '0']
['0', '0', '1', '1', '1']
['0', '1', '0', '0', '0']
['0', '1', '0', '0', '1']
['0', '1', '0', '1', '0']
['0', '1', '0', '1', '1']
['0', '1', '1', '0', '0']
['0', '1', '1', '0', '1']
['0', '1', '1', '1', '0']
['0', '1', '1', '1', '1']
['1', '0', '0', '0', '0']
['1', '0', '0', '0', '1']
['1', '0', '0', '1', '0']
['1', '0', '0', '1', '1']
['1', '0', '1', '0', '0']
['1', '0', '1', '0', '1']
['1', '0', '1', '1', '0']
['1', '0', '1', '1', '1']
['1', '1', '0', '0', '0']
['1', '1', '0', '0', '1']
['1', '1', '0', '1', '0']
['1', '1', '0', '1', '1']
['1', '1', '1', '0', '0']
['1', '1', '1', '0', '1']
['1', '1', '1', '1', '0']
Run Code Online (Sandbox Code Playgroud)