列出具有多个变量的理解

时间:2012-05-04 09:46:03

标签: python

有没有办法让列表理解中的两个或多个项目出列。

即。我想做这样的事情:

>>> q = [1, 2, 3, 4]
>>> r = [x+y for x, y in q]
** This does not work though :( **

预期:

>>> r
[3, 7]

3 个答案:

答案 0 :(得分:6)

您可以使用recipe文档中的石斑鱼itertools

>>> from itertools import izip_longest
>>> [x + y for x, y in grouper(2,q)]
[3, 7]

配方的源代码是:

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

答案 1 :(得分:1)

如果列表仅包含2个组,则工作。不适用于[1,2,3,4,5]但适用于[1,2,3,4,5,6]

>>> q = [1, 2, 3, 4]
>>> [x+y for x, y in zip(*[iter(q)]*2)]
[3, 7]

也是@gnibbler

的建议
>>> map(sum, zip(*[iter(q)]*2))

答案 2 :(得分:0)

另一种解决方案

>>> [sum(q[i:i+2]) for i in range(0,len(q),2)]
[3, 7]
>>> q=[1,2,3,4,5]
>>> [sum(q[i:i+2]) for i in range(0,len(q),2)]
[3, 7, 5]