键如何在min和max中工作?

时间:2014-02-04 04:36:05

标签: python key max min

我执行以下语句序列:

>>> a = range(10)
>>> min(a, key=lambda x: x < 5.3)
6
>>> max(a, key=lambda x: x < 5.3)
0

最小值和最大值与我期望的完全相反。

关于min和max的python文档非常粗略。

任何人都可以向我解释“钥匙”的工作原理吗?

2 个答案:

答案 0 :(得分:3)

key参数

的说明

Key的工作原理如下:

a_list = ['apple', 'banana', 'canary', 'doll', 'elephant']

min(a_list, key=len)

返回'doll'

max(a_list, key=len)

返回'elephant'

您为它提供了一个函数,它使用应用于每个项目的函数结果的最小值或最大值来确定在结果中返回哪个项目。

应用

如果你的函数返回一个类似于你的布尔值,那么它将返回最小值为True或False的第一个(即False),它将是6或者max(True)的第一个0

要看到这个:

>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> import pprint
>>> pprint.pprint(dict((i, i<5.3) for i in a))
{0: True,
 1: True,
 2: True,
 3: True,
 4: True,
 5: True,
 6: False,
 7: False,
 8: False,
 9: False}

为什么?

>>> min([True, False])
False
>>> max([True, False])
True

说明

为什么True大于False

>>> True == 1
True
>>> False == 0
True
>>> issubclass(bool, int)
True

事实证明,TrueFalse10密切相关。他们甚至分别对它们进行评估。

答案 1 :(得分:3)

因为所有值都是TrueFalse。因此,选择每一个中的第一个。

min([True, 1, False, 0])

将返回False而不是0,因为它们都具有相同的值但False首先发生

您的代码使用的key函数仅包含布尔值,因此对于min,第一个False 发生在6号。所以它是被选中的。

您可能想要做的是:

min(x for x in range(10) if x < 5.3)