如何在Python中添加和删除随机位填充

时间:2018-08-14 02:59:11

标签: python list padding

更新:我有一个代表位值的整数列表:

bits = [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1]
len(bits) == 30

我的问题是如何添加随机位填充以使位的长度为32,以及如何删除填充?
同样,当我有20位的长度时,如何添加4位填充以使其变为24位,以及如何删除4位填充?

1 个答案:

答案 0 :(得分:1)

这是提取到函数中的一种方法:

import random

def add_padding(seq, num_bits):
    pad_size = num_bits - len(seq) 
    return [random.choice([0, 1]) for _ in range(pad_size)] + seq


bit = [1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1]
print(len(bit))

padded = add_padding(bit, 32)
print(len(padded))   # <-- now a 32 bits sequence

要删除填充,您将需要以某种方式记住添加到序列中的位数,并删除它们;也许切片:

unpadded = padded[num_bits_added:]   # <-- restores the original sequence of bits

[编辑]::调整为最接近的字节数:

import random

def adjust_a_byte(seq):
    if len(seq) % 8 == 0 and len(seq) > 0:  # an empty sequence will return an 8 bit sequence (all padding)
        pad_size = 0
    else:
        pad_size = 8 * (len(seq) // 8 + 1) - len(seq)
    print('len(seq):', len(seq), 'len(seq) % 8:', len(seq) % 8, 'pad', pad_size)
    return random.choices([0, 1], k=pad_size) + seq

bit = [1, 0, 1, 1, 1, 1, 1, 1]
print(len(bit))

padded = adjust_a_byte(bit)
print(len(padded)) # <-- now a multiple of 8 bits sequence