迭代字符串列表并组合字符串值Python

hil*_*ndj 2 python string list bit

我有一个字符串列表,如下所示:

    sixbit = ['000011', '000001', '010100', '100001']
Run Code Online (Sandbox Code Playgroud)

我想迭代这个列表并生成一个如下所示的新列表:

    eightbit = ['00001100', '00010101', '00100001']
Run Code Online (Sandbox Code Playgroud)

出于说明的目的,len(sixbit)等于4,因为它很好地转换为8位.理想情况下,六位可以是任意长度 - 如果八位"切断"任何剩余的1或0,那就没问题.

这是我尝试过的一些代码......遗憾的是,它已经过了,但也许你可以看到我正在尝试做的事情.这个想法是1)将所有数字放入一个大字符串2)循环每个数字并保持计数,在迭代时将数字收集到持有者3)当count = 8附加到列表4)继续迭代

def compress_six_bit(ary):
    final_list = []
    holder = ''
    temp_string = ''
    encode_counter = 0

    for i in ary:
        holder = holder + i
        while encode_counter < 8:
            encode_counter = encode_counter + 1
            temp_string = temp_string + i
            final_list.append(temp_string)
        encode_counter = 0
        temp_string = ''

    return final_list
Run Code Online (Sandbox Code Playgroud)

ovg*_*vin 5

>>> chained = itertools.chain.from_iterable(sixbit)
>>> [''.join(bits) for bits in itertools.izip(*[chained]*8)]
['00001100', '00010101', '00100001']
Run Code Online (Sandbox Code Playgroud)

说明

chained只是原始字符串的所有字母的迭代器.它使用的chained功能itertools.

>>> chained = itertools.chain.from_iterable(sixbit)
>>> list(chained)
['0', '0', '0', '0', '1', '1', '0', '0', '0', '0', '0', '1', '0', '1', '0', '1', '0', '0', '1', '0', '0', '0', '0', '1']
Run Code Online (Sandbox Code Playgroud)

[chained]*8创建包含相同 chained对象8次的列表.

*只需将这8个元素解压缩到izip参数中.

izip 只返回元组,其中第一个包含参数中每个链式迭代器的第一个字母,第二个元组包含第二个字母等.有8个链接对象,因此每个元组中有8个字母.

最重要的是,这些字母是从每个迭代器中获取的,但它实际上是同一个迭代器的8个实例.它会被每次通话消耗掉.所以第一个元组包含链式迭代器的前8个字母.

>>> chained = itertools.chain.from_iterable(sixbit)
>>> list(itertools.izip(*[chained]*8))
[('0', '0', '0', '0', '1', '1', '0', '0'), ('0', '0', '0', '1', '0', '1', '0', '1'), ('0', '0', '1', '0', '0', '0', '0', '1')]
Run Code Online (Sandbox Code Playgroud)

在最后一步,我们将他们加入列表理解:

>>> chained = itertools.chain.from_iterable(sixbit)
>>> [''.join(bits) for bits in itertools.izip(*[chained]*8)]
['00001100', '00010101', '00100001']
Run Code Online (Sandbox Code Playgroud)