【发布时间】:2011-07-20 13:24:34
【问题描述】:
是否有合并列表中后续元素的命令 - 即在列表中 ['AA', 'BB', 'C', 'D'] 如何合并前两个元素(或任何其他元素,具体取决于在代码上)在列表中,留下一个类似 ['AABB', 'C', 'D'] 的列表?谢谢!
【问题讨论】:
是否有合并列表中后续元素的命令 - 即在列表中 ['AA', 'BB', 'C', 'D'] 如何合并前两个元素(或任何其他元素,具体取决于在代码上)在列表中,留下一个类似 ['AABB', 'C', 'D'] 的列表?谢谢!
【问题讨论】:
>>> a = ['AA', 'BB', 'C', 'D']
>>> a[0:2] = [''.join(a[0:2])]
>>> a
['AABB', 'C', 'D']
【讨论】:
如果你不关心初始化列表,你可以尝试以下方法:
>>> a = ['AA', 'BB', 'C', 'D']
>>> a[0] += a.pop(1)
如果你想获得新的并保持 initList 不变,你可以使用类似这样的东西(注意这只是一个示例):
a = ['AA', 'BB', 'C', 'D']
outList = a[:] # make a copy of list values
outList[0] += outputList.pop(1)
或者在某些情况下,您也可以尝试使用类似的东西:
from itertools import groupby
a = ['AA', 'BB', 'C', 'D']
res = [''.join((str(z) for z in y)) for x, y in groupby(a, key = lambda x: len(x) == 2)]
【讨论】:
outlist = a[:],然后outlist[0] += outlist.pop(1) 更好。
这是一个使用迭代器的 python 3.x 解决方案,因此与任何生成器对象兼容(如 range 对象...):
def merger(iterable, index=0, length=1):
it = iter(iterable)
for count in range(index):
yield next(it)
merged = next(it)
for count in range(length-1):
merged += next(it)
yield merged
for item in it:
yield item
【讨论】: