使用reduce()计算列表元素平方和时出现TypeError错误的原因咨询
问题解答
错误原因
reduce函数的回调逻辑必须接收两个参数:第一个是「累积计算的结果」,第二个是「当前遍历到的列表元素」。你写的lambda x: x ** 2只定义了一个参数,当reduce执行时,会自动把累积值和当前元素一起传入这个lambda,自然就触发了「参数数量不匹配」的错误。
修正方案
方案1:修正reduce的用法
给lambda补上累积值参数,同时指定初始累积值(第三个参数0),先计算元素平方再累加到累积值里:
from functools import reduce def square_sum(numbers): return reduce(lambda acc, num: acc + num ** 2, numbers, 0) print(square_sum([1, 2, 2])) # 输出9
方案2:用sum替代reduce(更推荐)
计算平方和没必要用reduce,直接用sum配合生成器表达式更直观,可读性更强:
def square_sum(numbers): return sum(num ** 2 for num in numbers) print(square_sum([1, 2, 2])) # 输出9
内容的提问来源于stack exchange,提问作者mind overflow
相关产品推荐
相关产品推荐

