python:创建所有可能的具有特定长度的 1 或 0 的唯一列表

python: create all possible unique lists with 1 or 0 of specific length

我想创建所有可能的二进制向量列表,直到达到指定的长度,有更好的 "pythonic" 方法吗?

1
0
11
10
01
00
111
110
101
100
011
010
001
000
[...]

我使用了一个递增大小的递归函数:

def createAllBinHelper(length):
    def createAllBin(thelist, length):
        if length == 0:
            allpossibilities.append(thelist)
        else:
            createAllBin(thelist+'1', length-1)
            createAllBin(thelist+'0', length-1)

    allpossibilities = []

    for i in range(1,length):
        createAllBin('', i)

    return allpossibilities

也许您可能会对这样的内容感兴趣

maxLength = 4
L = ['']
for n in range(maxLength):
    tmp = []
    for el in L:
        tmp.append(el+'0')
        tmp.append(el+'1')
        tmp.append('')
    L = tmp
L = sorted(set(L))
print(L)

输出

['', '0', '00', '000', '0000', '0001', '001', '0010', '0011', '01', '010', '0100', '0101', '011', '0110', '0111', '1', '10', '100', '1000', '1001', '101', '1010', '1011', '11', '110', '1100', '1101', '111', '1110', '1111']

如果你觉得有点无聊,这里还有别的东西

maxLength = 4
tmp = (2**maxLength)-1
s= ''
for n in range(1, tmp+1):
    s= ''
    while n>0:
        rem = n % 2
        n = int(n/2)
        s = s + str(rem)
    print(s)

这将为您提供实际的二进制组合(没有全零)。

哦,对了,还有输出

1
01
11
001
101
011
111
0001
1001
0101
1101
0011
1011
0111
1111

您可以将 for 循环与 itertools.product 相结合。

from itertools import product

for i in range(1, 4):
    for p in product('10', repeat=i):
        print(''.join(p))

range 的上限更改为 n+1 将允许您设置二进制字符串的最大长度。

这是当前唯一一个逐字输出示例的答案(仅当顺序重要时才重要)。