使用reduce在python中乘以成对元素
对于以下列表:使用reduce在python中乘以成对元素,python,list,reduce,itertools,Python,List,Reduce,Itertools,对于以下列表: a = [1,2,3,4,5,6] 我想使用下面的代码将成对元素相乘,如下所示: (a[0] + a[1]) * (a[2] + a[3]) * (a[4] + a[5]) 我尝试过使用类似于: reduce((lambda x, y: (x+y)), numbers) 以及: 但我不知道如何让它在整个列表中起作用。任何帮助都将不胜感激 整个解决方案必须适合reduce,并且我无法导入任何其他模块。您可以reduce您自己的生成器,该生成器提供了iterable中对的总
a = [1,2,3,4,5,6]
我想使用下面的代码将成对元素相乘,如下所示:
(a[0] + a[1]) * (a[2] + a[3]) * (a[4] + a[5])
我尝试过使用类似于:
reduce((lambda x, y: (x+y)), numbers)
以及:
但我不知道如何让它在整个列表中起作用。任何帮助都将不胜感激
整个解决方案必须适合reduce,并且我无法导入任何其他模块。您可以
reduce
您自己的生成器,该生成器提供了iterable中对的总和:
def pairwise_sum(seq):
odd_length = len(seq) % 2
it = iter(seq)
for item1, item2 in zip(it, it):
yield item1 + item2
if odd_length:
yield seq[-1]
>>> reduce(lambda x, y: x*y, pairwise_sum([1,2,3,4,5,6]))
231
或者,如果您希望它更通用,您可以使用添加所有对,然后使用reduce
将所有和相乘:
from itertools import zip_longest
from functools import reduce
from operator import mul
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
>>> reduce(mul, map(sum, grouper([1,2,3,4,5,6], 2, fillvalue=0)))
231
可分两步完成:
[sum(a[i:i+2]),对于范围(0,len(a),2)内的i]
reduce(lambda x,y:x*y,新列表)
将它们组合在一起:
reduce(lambda x, y: x * y, [sum(a[i:i+2]) for i in range(0, len(a), 2)])
您需要成对迭代,将数字相加,然后对结果进行乘法运算。不幸的是,我唯一可以使用的导入是reduce。您可以在问题中这样说。@T.J.没问题,我更新了答案,包括一个不依赖导入的版本。超级聪明的解决方案!我来这里是想说这个,除了我使用了
int.\uu mul\uu
而不是lambda,假设列表中的项目总是整数。可能最好使用sum(a[I:I+2])
,否则这对奇数长度的列表不起作用(目前抛出了一个索引器)。否则就是一个很好的解决方案!
reduce(lambda x, y: x * y, [sum(a[i:i+2]) for i in range(0, len(a), 2)])