如何分组列表中的元素?

时间:2017-06-14 14:19:22

标签: python list

我有一个清单:

    list = ['a', 'b', 'c', 'd', 'e', 'f']

我如何将此列表转换为:

    list = ['ab', 'cd', 'ef']

提前致谢!

3 个答案:

答案 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])))