“只能将str(而不是“ list”)连接到str”,同时将零添加到二进制数

时间:2019-11-21 23:13:45

标签: python

我正在制作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”中尝试过它时,它可以工作。这有点令人困惑。我在做什么错,为什么它可以在我的“素描本”中使用?

4 个答案:

答案 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,用于将二进制数格式化为所需的长度。