多变量列表理解

2024-06-16 09:19:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在列表理解中是否有任何方法可以将两个或多个项目取消排队。

我想做这样的事情:

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

预期:

>>> r
[3, 7]

Tags: 项目方法in列表fornotthis事情
3条回答

另一个解决方案

>>> [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]

您可以使用itertools文档中的grouperrecipe

>>> 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)

如果列表只包含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))

相关问题 更多 >