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