使用 reduce() (Python) 查找列表中最大值的变化次数

Find how many times changes maximum value in a list with reduce() (Python)

使用reduce()函数,我必须找出一个列表的最大值改变了多少次。 这是我的代码,但我不明白为什么 count 保持为 0.

from functools import reduce

count = 0

heights = [10, 8, 11, 2, 1, 4, 13, 11]

reduce(lambda a, b: count + 1 if a < b else count + 0, heights, 0)

print(count)

reduce的工作方式如下:

  • 采用默认值(最后一个参数)和序列的第一个元素,并应用提供的函数。在这里,我们取 010,并计算:count + 1 if 0 < 10 else count + 0.

  • 获取该操作的结果,并将该函数应用于该元素和第二个元素,依此类推。

你不能指望以这种方式解决问题,因为 none 实际上 重新分配 count - 它保持等于 0 无论迭代多少次。 lambda 的每个应用程序只会生成 01。此外,这些 01 值将被带入下一步,而不是记住之前的最大值。

reduce 不是这项工作的正确工具但是您可以通过计算元组强制它工作每一步的(到目前为止看到的最大值,计数)。 (您需要实际使用 reduce 返回的值,并且没有任何外部 count。)