我有一个清单:
list = ['a', 'b', 'c', 'd', 'e', 'f']
我如何将此列表转换为:
list = ['ab', 'cd', 'ef']
提前致谢!
答案 0 :(得分:3)
假设:
>>> li=['a', 'b', 'c', 'd', 'e', 'f']
您可以使用zip:
>>> ['{}{}'.format(a,b) for a,b in zip(li, li[1:])]
['ab', 'bc', 'cd', 'de', 'ef']
或者:
>>> [a+b for a,b in zip(li, li[1:])]
['ab', 'bc', 'cd', 'de', 'ef']
或者,如果你想要['ab', 'cd', 'ef']
,你可以这样做:
>>> [a+b for a,b in zip(*[iter(li)]*2)]
['ab', 'cd', 'ef']
或者,
>>> [a+b for a,b in zip(li[::2],li[1::2])]
['ab', 'cd', 'ef']
对于不同的群组长度:
>>> [''.join(l) for l in zip(*[iter(li)]*3)]
['abc', 'def']
(请不要使用list
作为列表的名称。你用相同的名称破坏了这个功能)
答案 1 :(得分:1)
def pairs(sequence):
sequence = iter(sequence)
while True:
yield next(sequence) + next(sequence)
>>> list(pairs(['a', 'b', 'c', 'd']))
['ab', 'cd']
>>> list(pairs(['a', 'b', 'c']))
['ab']
请注意,当总数不均匀时,它会忽略元素。
答案 2 :(得分:0)
你有很多方法,这里有一个:
[n for n in map(lambda x: x[0]+x[1], zip(list[::2], list[1::2]))]
我没有使用list()
来强制输出的原因是因为你占用了它,这是不推荐的。如果您将list
重命名为ls
,则此处的版本较短:
list(map(lambda x: x[0]+x[1], zip(ls[::2], ls[1::2])))