python - 我可以在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
推荐阅读
- java - Dockerfile Maven 插件:找不到插件
- elasticsearch - 计算过滤和排序查询的结果
- r - 从数据可视化基础重新创建绘图
- azure - 部署中指定但未部署的 Azure IoT 中心模块
- angular - 我们可以在 ionic 4 stable 中使用 angular 6 吗?
- python - 识别当前正在运行的脚本
- agda - 在 Agda-stdlib 的 IO 中使用 `do` 符号的正确方法是什么?
- python - 如何等待子进程完成、存储其输出并向输出添加前缀(不带新行)?
- r - R tm package cosine similary
- java - 使用带有 gradle 的 proguard 创建混淆的应用程序 jar 时重复的 zip 条目