使用list comprehension来构建元组

时间:2013-03-14 13:05:41

标签: python

如何使用列表推导从列表中构建2元组的元组。它等同于

tup = ()
for element in alist:
    tup = tup + ((element.foo, element.bar),)

2 个答案:

答案 0 :(得分:79)

tup = tuple((element.foo, element.bar) for element in alist)

从技术上讲,它是generator expression。它就像一个列表理解,但它被懒惰地评估,不需要为中间列表分配内存。

为了完整性,列表理解将如下所示:

tup = tuple([(element.foo, element.bar) for element in alist])

PS:attrgetter速度不快(alist此处有一百万件商品):

In [37]: %timeit tuple([(element.foo, element.bar) for element in alist])
1 loops, best of 3: 165 ms per loop

In [38]: %timeit tuple((element.foo, element.bar) for element in alist)
10 loops, best of 3: 155 ms per loop

In [39]: %timeit tuple(map(operator.attrgetter('foo','bar'), alist))
1 loops, best of 3: 283 ms per loop

In [40]: getter = operator.attrgetter('foo','bar')

In [41]: %timeit tuple(map(getter, alist))
1 loops, best of 3: 284 ms per loop

In [46]: %timeit tuple(imap(getter, alist))
1 loops, best of 3: 264 ms per loop

答案 1 :(得分:0)

您可以使用以下表达式

tup = *[(element.foo, element.bar) for element in alist]

这首先将生成一个元组列表,然后将其转换为元组列表。