使用列表理解来构build一个元组

如何使用列表理解从列表中构build2元组的元组。 这将相当于

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

从技术上讲,这是一个生成器expression式 。 这就像一个列表理解,但它是懒惰的评估,并不需要分配内存的中间名单。

为了完整性,列表理解看起来像这样:

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

PS: attrgetteralist在这里有一百万项):

 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