Python程序员的逻辑任务。从列表中创建列表元组

时间:2010-07-30 20:03:39

标签: python list

我需要制作包含2个项目的列表元组。

例如,如果我有列表range(10)

我需要像这样制作元组:

[(0,1),(2,3),(4,5),(6,7),(8,9)]

我该如何实现?

3 个答案:

答案 0 :(得分:3)

许多不同的方式。只是为了炫耀一些:

作为列表理解,其中l是序列(即整数索引):[(l[i], l[i+1]) for i in range(0,len(l),2)]

作为生成器函数,适用于所有迭代:

def some_meaningful_name(it):
    it = iter(it)
    while True:
        yield next(it), next(it)

Naive通过列表切片(较大列表的sucksy性能)和复制,再次使用列表理解:[pair for pair in zip(l[::2],l[1::2])]

我喜欢第二好的,它可能是最pythonic和泛型的(因为它是一个生成器,它在恒定的空间中运行)。

答案 1 :(得分:2)

请参阅itertools文档中的grouper recipe

from itertools import izip_longest

def grouper(n, iterable, fillvalue=None):
    """
    >>> grouper(3, 'ABCDEFG', 'x')
    ["ABC", "DEF", "Gxx"]
    """
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

这意味着您可以:

[(el[0], el[1]) for el in grouper(2, range(10))]

或更一般地说:

[(el[0], el[1]) for el in grouper(2, elements)]

答案 2 :(得分:0)

也可以使用numpy

完成
import numpy
elements = range(10)

elements = [tuple(e) for e in numpy.array(elements).reshape(-1,2).tolist()]
# [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]