我可以向reduce函数添加迭代器吗?
假设我有以下列表:A = [1,2,3,4], 通过使用该reduce函数,找到元素的乘积,我可以做到
prodA = reduce(lambda x,y: x*y, A)
但是,如果我有另一个 list 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函数中。我怎么能做到这一点?非常感谢!
回答
这看起来像是 的工作zip。具体来说,我们将把两个列表压缩在一起,然后我们将我们的归约函数表示为一个接受元组而不是简单整数的函数。
将我们的列表压缩在一起给我们
>>> 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