关于python:如何将字符列表加入8个字符串?

How can I join a list of characters into strings of 8?

本问题已经有最佳答案,请猛点这里访问。

我有一个包含字符的python列表,希望将它们连接起来,创建一个包含8个元素的字符串列表,例如:

1
x = ['0','0','1','a','4','b','6','2','2','1','4','1','5','7','9','8']

结果

1
['001a4b62', '21415798']

itertools文档包含一个grouper配方,该配方将连续项目分组到固定大小的组:

1
2
3
4
5
6
7
from itertools import *

def grouper(iterable, n, fillvalue=None):
   "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

现在,您只需将大小为8的列表分组,并将每个列表转换为一个字符串:

1
2
>>> [''.join(e) for e in grouper(x, 8)]
['001a4b62', '21415798']

1
x = ['0','0','1','a','4','b','6','2','2','1','4','1','5','7','9','8']

简单地说:

1
2
print(["".join(x[i:i + 8]) for i in range(0, len(x), 8)])
> ['001a4b62', '21415798']


首先检查以下如何将python列表分成大小相等的块?

在python 3.x中,有了这个功能,就可以使用上面的变量x

1
2
3
import operator
import functools
result = map(lambda s: functools.reduce(operator.add, s), zip(*[iter(x)]*8))

在python 2.x中,可以删除reduce的functools前缀。

佛瑞克


可以使用join将字符数组转换为字符串。这是你在案件中的做法-

1
2
3
4
5
6
x = ['0','0','1','a','4','b','6','2','2','1','4','1','5','7','9','8']
i = 0
strlist = []
while i<len(x):
  strlist.append(''.join(x[i:i+8]))
  i+=8

strlist将保存分组后的字符串。