我一直在做一个Python项目,需要使用functools.reduce()
函数。我在使用自定义reducer函数时遇到了一个不寻常的行为,我无法找出问题的根本原因。
下面是代码片段:
import functools
def custom_reducer(x, y):
return x * y - x + y
numbers = [1, 2, 3, 4, 5]
result = functools.reduce(custom_reducer, numbers)
print("Result:", result)
我期望结果是这样计算的:
custom_reducer(3, 3) => 3 * 3 - 3 + 3 = 9
custom_reducer(9, 4) => 9 * 4 - 9 + 4 = 31
custom_reducer(31, 5) => 31 * 5 - 31 + 5 = 135
然而,我收到的实际输出是:Result: 149
这个结果与我的期望值不同,我不确定为什么会发生这种情况。有人能解释一下在使用functools.reduce()的自定义reducer函数时发生了什么吗?reduce()函数是否存在导致这种差异的特定属性或行为?此外,如果有更优的方法可以使用不同的方法达到相同的结果,请分享。
这应该有助于解释"幕后发生了什么";在理解上的错误是:
steps = [numbers]
while len(steps[-1]) > 1:
last_step = steps[-1]
one_reduce = custom_reducer(last_step[0], last_step[1])
steps.append([one_reduce, *last_step[2:]])
steps == [
[1, 2, 3, 4, 5],
[3, 3, 4, 5],
[9, 4, 5],
[31, 5],
[129],
] # true