【发布时间】:2021-08-04 22:54:08
【问题描述】:
我有一个数字列表:
numbers = list(range(1,21,1))
还有一个计算平均值的简单函数:
def average(a_list):
sum = 0
for i in a_list:
sum += i
return sum/len(a_list)
我正在尝试使用 reduce 来查找列表的平均值:
from functools import reduce
reduce(average, numbers)
但我收到此错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-85-c930f782df8d> in <module>
----> 1 reduce(average, numbers)
TypeError: average() takes 1 positional argument but 2 were given
【问题讨论】:
-
为什么使用
reduce?正如错误所说,您的average函数只接受一个参数。它不是有效的归约函数。只需将numbers直接传递给average:average(numbers)。您可以使用reduce替换您当前的average函数,但将average赋予reduce目前没有意义。 -
你认为
reduce是做什么的?reduce需要一个带有两个参数的函数,你的需要一个。为什么你认为reduce没有遍历列表? -
@juanpa.arrivillaga 我意识到我的错误,我的函数平均值需要一个参数,而传递给“reduce”的函数需要 2 个。我试图理解错误语句,但对我什么时候做的事实感到困惑提供 2 个参数,因为我已经通过了一个,列表。我意识到错误语句中的“2”指的是列表的前 2 个元素,并且在 reduce 使用这两个元素来实现平均功能时失败了。现在说得通了,reduce 的目的也很明确了。感谢您的洞察力。
-
@Carcigenicate 谢谢,我现在很清楚“减少”的真正目的