[英]create a list of strings representing binary values, with a fixed length
我需要一個表示二進制值的字符串列表,該字符串的長度固定,因此前導零。 例如:
my_list = ["00", "01", "10", "11"]
我希望能夠根據給定的位數生成列表。 我想出了一個代碼,但是我不確定這是否是最好的方法,並且想知道是否可以使用單層代碼做同樣的事情?
bits = 2
my_list = []
for i in range(2**bits):
my_list.append(format(i, '0b').zfill(bits))
您可以使用itertools.product
完成此操作
from itertools import product
def bitstrings(n):
return [''.join(bits) for bits in product('01', repeat=n)]
您可以使用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']
要進行列表理解,您所需要做的就是調出最后一行並使其成為列表:
>>> 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']
您可以在不使用任何導入的情況下執行此操作,並且可以使用列表推導將其設為一行。 我建議使用<<
而不是**
因為在處理二進制數時它要快得多,因為它處理二進制數然后將其移位(1 << n與2 ** n相同) n
。
def bitstring(bits):
return ["{:0{}b}".format(i, bits) for i in range(1 << bits)]
print(bitstring(2))
將返回
['00','01','10','11']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.