我正在制作RSA。我需要在真正大的二进制数的左侧添加零。 我有这个清单:
text = ['110000100001101000000011011110000110101000001100100000011000010000010000000001101101', '11101000000111010100001100001000011011000000110111000001100101']
我想得到这个
text= ['0000110000100001101000000011011110000110101000001100100000011000010000010000000001101101', '000011101000000111010100001100001000011011000000110111000001100101']
在这种情况下,左侧缺少4个零。 我尝试了以下循环:
i = 0;
while i < len(text):
j = 0
zeroCount = (10 - (len(text[i]) % 11)) + 1
while j < zeroCount:
text[i] = '0' + text[i]
j += 1
i += 1
在我的PyQt项目中不起作用。但是,当我在空白的untitled1.py“ sketchbook”中尝试过它时,它可以工作。这有点令人困惑。我在做什么错,为什么它可以在我的“素描本”中使用?
答案 0 :(得分:0)
尝试这样的事情:
for i, binary_number in enumerate(text):
text[i] = ((10 - (len(text[i]) % 11)) + 1) * '0' + text[i]
这会将所需的零添加到列表中的每个二进制字符串。
答案 1 :(得分:0)
使用列表理解:
text = ['110000100001101000000011011110000110101000001100100000011000010000010000000001101101', '11101000000111010100001100001000011011000000110111000001100101']
result = ["0"*(10 - (len(i) % 11) + 1) + "{}".format(i) for i in text]
它将在每个二进制字符串前面添加4个零。
print(result)
['0000110000100001101000000011011110000110101000001100100000011000010000010000000001101101', '000011101000000111010100001100001000011011000000110111000001100101']
答案 2 :(得分:0)
我认为这是最简单(也是最新的)方法。
bin_strs = ['110000100001101000000011011110000110101000001100100000011000010000010000000001101101',
'11101000000111010100001100001000011011000000110111000001100101']
bin_strs_pad = ['0' * ((10 - (len(curr) % 11)) + 1) + curr for curr in bin_strs]
答案 3 :(得分:-1)
您可以使用format
获得所需的结果。使用格式说明符0xxb
,其中xx是输出中所需的位数。例如,如果您希望数字为16位长:
>>> t = "11001" # example, non zero-padded binary number
>>>"{0:016b}".format(int(t, 2)) # pad with zeros up to 16 bits
'0000000000011001'
或者,使用f字符串(Python 3.6及更高版本):
>>> t = "11001"
>>> f"{int(t,2):016b}"
'0000000000011001'
其他答案只限于具有最短的列表理解能力,并匹配OP的11模方法,但这是one obvious way,用于将二进制数格式化为所需的长度。