Min / Max:键如何排序?

Min / Max: how does key sort?

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

假设我有以下列表: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。

谁能帮忙解释一下?我想更好地理解以避免在处理不同情况时出错。

这不是使用 max 的正确方法,您应该使用生成器表达式过滤掉元素,然后取 max

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

如果将该条件传递给 key,则 lambda 的 return 值将用于排序,所有值都将只是 TrueFalse(其中 False < True),因此您将获得第一个错误值,在本例中为 10.

key 参数真正用于为列表中的每个项目指定一种访问特定数据的方法。例如说我有这个 class

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