listA = ['000','001','010','011', '100','101','111','110']
为了得到上面的列表,我通常使用下面的代码。我的目标是得到3个数字的所有可能组合,其中每个数字可以是0
或1
。
listA = list(range(0,222))
listA = [str(x).zfill(3) for x in listA]
listA = [x for x in listA if not x[-3] in [str(z) for z in range(2,10,1)]]
listA = [x for x in listA if not x[-2] in [str(z) for z in range(2,10,1)]]
listA = [x for x in listA if not x[-1] in [str(z) for z in range(2,10,1)]]
这只适用于list(range(0,222))
相对较小的情况,对于(0,222222222222)
这样的大范围,listA = list(range(0,222222222222))
返回Memory error
。还有别的办法吗?
您可以尝试使用itertools.product
:
>>> from itertools import product
>>> a = [''.join(p) for p in product('01', repeat=3)]
>>> a
['000', '001', '010', '011', '100', '101', '110', '111']
这不是二进制字符串从0
到一些结束数?
你可以这样做:
def zn1(up):
w=len(f'{up:b}')
return [f'{x:0{w}b}' for x in range(up+1)]
或者,如果内存有问题,使用生成器:
def zn1(up):
w=len(f'{up:b}')
for n in range(up+1):
yield f'{x:0{w}b}'
第一个例子:
>>> zn1(7)
['000', '001', '010', '011', '100', '101', '110', '111']
>>> zn1(2000)
['00000000000', '00000000001', '00000000010', '00000000011', '00000000100',
...
'11111001100', '11111001101', '11111001110', '11111001111', '11111010000']