我可以向reduce函数添加迭代器吗?

2024-09-29 17:22:14 发布

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

假设我有以下列表:A = [1,2,3,4],通过使用reduce函数来查找元素的乘积,我可以

prodA = reduce(lambda x,y: x*y, A)

但是,如果我有另一个列表B=[9,8,7,6],我是否仍然可以使用reduce函数执行以下操作?(从上到下指示步骤)

9
(9+1)* 2
((9+1) *2)+8
(((9+1) *2)+8)*3
((((9+1) *2)+8)*3)+7
(((((9+1) *2)+8)*3)+7)*4
((((((9+1) *2)+8)*3)+7)*4)+6

我不太确定是否可以为B函数添加类似列表reduce的迭代器。我怎么能做到?非常感谢


Tags: lambda函数元素reduce列表步骤乘积proda
2条回答

您可以使用zip作为输入,1作为初始值:

from functools import reduce

A = [1,2,3,4]
B = [9,8,7,6]

r = reduce(lambda r,ab: r*ab[0]+ab[1],zip(A,B),1)
print(r) # 370

这看起来像是^{}的工作。具体来说,我们将把这两个列表压缩在一起,然后将我们的缩减函数表示为一个接受元组而不是简单整数的函数

将我们的列表压缩在一起可以让我们

>>> list(zip(A, B))
[(1, 9), (2, 8), (3, 7), (4, 6)]

在每一步中,您的函数将乘以一个A元素,然后添加一个B元素。因此,从1开始(这是一个合理的默认值,因为我们做的第一件事是乘法,所以1将是第一个操作的标识),乘以元组的第一个元素,然后添加第二个元素

reduce(lambda x, y: x * y[0] + y[1], zip(A, B), 1)

通过您的输入,我们得到370,它等于

((((9+1)*2)+8)*3+7)*4+6

相关问题 更多 >

    热门问题