我需要一个表示二进制值的字符串列表,它具有固定的长度,因此带有前导零。例如:
my_list = ["00", "01", "10", "11"]
我希望能够根据位数生成列表。我想出了一个代码,但我不确定这是不是最好的方法,并且想知道是否可以用单行代码做同样的事情?
bits = 2
my_list = []
for i in range(2**bits):
my_list.append(format(i, '0b').zfill(bits))
答案 0 :(得分:2)
您可以使用itertools.product
来完成此操作
from itertools import product
def bitstrings(n):
return [''.join(bits) for bits in product('01', repeat=n)]
答案 1 :(得分:2)
您可以使用itertools.product
:
>>> from itertools import product
>>> [''.join(bs) for bs in product('01', repeat=2)]
['00', '01', '10', '11']
>>> [''.join(bs) for bs in product('01', repeat=3)]
['000', '001', '010', '011', '100', '101', '110', '111']
您还可以直接在format
中指定总字符串长度:
>>> n = 2
>>> [format(i, '0%ib' % n) for i in range(2**n)]
['00', '01', '10', '11']
>>> n = 3
>>> [format(i, '0%ib' % n) for i in range(2**n)]
['000', '001', '010', '011', '100', '101', '110', '111']
答案 2 :(得分:1)
列表理解所需要做的就是调出最后一行并将其列为一个列表:
>>> bits = 2
>>> l = [format(i, 'b').zfill(bits) for i in range(2**bits)]
>>> l
['00', '01', '10', '11']
所以
for block1:
block2
是
[block2 for block1]
或者,您可以使用itertools.product
,并映射''.join
以使其格式正确:
>>> import itertools as it
>>> list(map(''.join, it.product('01', repeat=bits)))
['00', '01', '10', '11']
答案 3 :(得分:0)
您可以在不使用任何导入的情况下执行此操作,并且可以使用列表推导使其成为一行。我建议使用<<
代替**
,因为在处理二进制数时它会更快 ,因为它处理二进制数字然后将其移位(1&lt; 1&lt; 1&lt; 1&gt; ;&lt; n与{** 1}}的2 ** n相同。
n
将返回
[&#39; 00&#39;,&#39; 01&#39;,&#39; 10&#39;,&#39; 11&#39;]