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

时间:2016-04-03 00:43:48

标签: python list combinations permutation

我想创建所有可能的二进制向量列表,直到指定的长度,是否有更好的“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

3 个答案:

答案 0 :(得分:1)

您可以将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将允许您设置二进制字符串的最大长度。

这是唯一能够逐字生成示例输出的当前答案(只有在订单重要时才会生效)。

答案 1 :(得分:0)

也许这样的事情会让你感兴趣

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']

答案 2 :(得分:0)

如果你感到有点无聊,这里还有别的东西

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