使用 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
的工作方式如下:
采用默认值(最后一个参数)和序列的第一个元素,并应用提供的函数。在这里,我们取 0
和 10
,并计算:count + 1 if 0 < 10 else count + 0
.
获取该操作的结果,并将该函数应用于该元素和第二个元素,依此类推。
你不能指望以这种方式解决问题,因为 none 实际上 重新分配 count
- 它保持等于 0
无论迭代多少次。 lambda
的每个应用程序只会生成 0
或 1
。此外,这些 0
和 1
值将被带入下一步,而不是记住之前的最大值。
reduce
不是这项工作的正确工具,但是您可以通过计算元组强制它工作每一步的(到目前为止看到的最大值,计数)。 (您需要实际使用 reduce
返回的值,并且没有任何外部 count
。)
使用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
的工作方式如下:
采用默认值(最后一个参数)和序列的第一个元素,并应用提供的函数。在这里,我们取
0
和10
,并计算:count + 1 if 0 < 10 else count + 0
.获取该操作的结果,并将该函数应用于该元素和第二个元素,依此类推。
你不能指望以这种方式解决问题,因为 none 实际上 重新分配 count
- 它保持等于 0
无论迭代多少次。 lambda
的每个应用程序只会生成 0
或 1
。此外,这些 0
和 1
值将被带入下一步,而不是记住之前的最大值。
reduce
不是这项工作的正确工具,但是您可以通过计算元组强制它工作每一步的(到目前为止看到的最大值,计数)。 (您需要实际使用 reduce
返回的值,并且没有任何外部 count
。)