2024-09-26 17:42:55 发布
网友
在列表理解中是否有任何方法可以将两个或多个项目取消排队。
我想做这样的事情:
>>> q = [1, 2, 3, 4] >>> r = [x+y for x, y in q] ** This does not work though :( **
预期:
>>> r [3, 7]
另一个解决方案
>>> [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]
[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))
另一个解决方案
您可以使用itertools文档中的grouperrecipe:
配方的源代码如下:
如果列表只包含2组,则有效。例如,不适用于
[1,2,3,4,5]
,但适用于[1,2,3,4,5,6]
同样由@gnibbler建议
相关问题 更多 >
编程相关推荐