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
将允许您设置二进制字符串的最大长度。
这是当前唯一一个逐字输出示例的答案(仅当顺序重要时才重要)。
我想创建所有可能的二进制向量列表,直到达到指定的长度,有更好的 "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
将允许您设置二进制字符串的最大长度。
这是当前唯一一个逐字输出示例的答案(仅当顺序重要时才重要)。