创建一个表示二进制值的字符串列表,具有固定长度

时间:2018-01-03 21:20:52

标签: python

我需要一个表示二进制值的字符串列表,它具有固定的长度,因此带有前导零。例如:

my_list = ["00", "01", "10", "11"]

我希望能够根据位数生成列表。我想出了一个代码,但我不确定这是不是最好的方法,并且想知道是否可以用单行代码做同样的事情?

bits = 2
my_list = []
for i in range(2**bits):
    my_list.append(format(i, '0b').zfill(bits))

4 个答案:

答案 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;]