python - 为什么 reduce 返回一个列表而不是单个值?
问题描述
我只是在探索 reduce,但我并不了解它背后的整个系统。我确实知道 reduce 很可能会返回一个值,但是在这种情况下它是如何工作的呢?
answer = reduce(lambda x, y: x[0]*x[1] * ([y[0] + y[1]]), [(2,6), (1, 2), (5, 6)])
解决方案
[y[0] + y[1]]
是一个列表,所以你的 lambda 是一个整数乘以x[0]*x[1]
一个 list ([y[0] + y[1]])
,所以你得到另一个列表作为结果,因为:
>>> 5 * [6]
[6, 6, 6, 6, 6]
>>> 8 * [4,6]
[4, 6, 4, 6, 4, 6, 4, 6, 4, 6, 4, 6, 4, 6, 4, 6]
至于为什么结果是9 * [11]
:
>>> def thing(x, y):
... print(x, y)
... return x[0]*x[1] * ([y[0] + y[1]])
...
>>> reduce(thing, [(2,6), (1, 2), (5, 6)])
1. (2, 6) (1, 2)
2. [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] (5, 6)
[11, 11, 11, 11, 11, 11, 11, 11, 11]
x == (2, 6)
,y == (1, 2)
=>tmp1 == (2 * 6) * [1 + 2] == 12 * [3]
- 第一个参数是累加器,所以
x
现在是上一次迭代中的 3 列表。根据你的公式,result == (3 * 3) * [5 + 6] == 9 * [11]
推荐阅读
- android - Fill a listview from a different class android
- javascript - 限制查看器 js url 在不登录的情况下访问文件
- java - MongoDB存储库-如何注释不是文档的子类?
- node.js - 添加 newman 时 AWS Lambda 任务超时
- java - javafx.fxml.LoadException:未指定控制器
- nlp - nltk wordnet lemmatizer 语言是否独立?
- php - Laravel SoftDelete 魔法
- javascript - 如何避免 AJAX async = false
- python - 检测损坏的 xlsx 文件(zip zith 更改扩展名)pandas
- mysql - 如何在从mysql中选择到excel文件时删除特殊的重音字符