【问题标题】:Min / Max: how does key sort?Min / Max:key如何排序?
【发布时间】:2021-06-26 15:17:05
【问题描述】:

我对 min() 和 max() 中 key 参数的行为有点困惑

假设我有以下列表:c=[10,11,15,25,50]

我希望最大值超过 20,所以我这样做:max(c,key= lambda x: x>20)。结果是 25,应该是 50。

我希望最大值低于 20,所以我这样做:max(c,key= lambda x: x<20)。结果是 10,应该是 15。

与 min() 相同。如果我想要 20 以上的最小值 (min(c,key= lambda x: x>20)),这会给我 10,而不是 25。

有人可以帮忙解释一下吗?我想更好地理解,以避免在处理不同的条件时出错。

【问题讨论】:

  • 如果x>20lambda x: x>20 的键将返回True,否则返回False。它不会返回 x 本身的值。
  • 是什么让您认为key= lambda x: x>20 会将输出限制 为大于20 的值?您认为max(c,key= lambda x: -x) 应用了哪些“限制”?

标签: python key max min


【解决方案1】:

这不是使用max 的正确方法,而是您希望使用生成器表达式来过滤掉元素,然后取其中的max

>>> max(i for i in c if i > 20)
50

如果您将该条件传递给key,则该lambda 的返回值将用于排序,并且所有值将简单地为TrueFalse(其中False < True)所以您' 将获得第一个错误值,在本例中为 10

key 参数确实适用于如果您想指定一种访问列表中每个项目的特定数据的方法。例如说我有这门课

class point:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

如果我想根据.y 的值找到最大的点,那是使用key 参数的好时机

>>> data = [point(1,2,3), point(3,2,1), point(9,8,7)]
>>> p = max(data, key = lambda pt: pt.y)
>>> p.y
8

【讨论】:

  • 感谢您的评论@Cory。我实际上是在使用我在这里找到的日期的一段代码:stackoverflow.com/questions/60109868/… 我不清楚它是如何工作的,所以我只是在玩一个简单的例子。
猜你喜欢
  • 1970-01-01
  • 2015-02-10
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
相关资源
最近更新 更多