簡體   English   中英

創建一個表示二進制值的字符串列表,長度固定

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM