【问题标题】:Find how many times changes maximum value in a list with reduce() (Python)使用reduce()查找列表中最大值的变化次数(Python)
【发布时间】:2020-08-13 14:51:45
【问题描述】:

使用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)

【问题讨论】:

  • “列表的最大值变化多少次”——这是什么意思?
  • 我认为这意味着,当您从头到尾扫描列表时,您观察到的元素大于任何先前元素的次数。
  • @KarlKnechtel 完全正确。我更正了我的问题
  • a>b 始终处于状态
  • 你永远不会分配给count。你为什么希望它改变?

标签: python python-3.x list reduce


【解决方案1】:

reduce 的工作方式如下:

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

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

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

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

【讨论】:

  • 非常感谢,但我实际上并没有理解最后一句话。你能帮我写代码吗?
  • 想象一下:我们从(0, 0)10 开始,然后计算(10, 1),因为0 &lt; 10。然后我们将得到(10, 1)8,并应再次计算10, 1。当我们找到一个新的最大值时,我们需要替换最大值,并增加计数。
猜你喜欢
  • 2017-09-20
  • 1970-01-01
  • 2023-01-02
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2016-12-21
相关资源
最近更新 更多