哪些函数可以用作 min() 和 max() 函数中的 'key=func' 参数?

What functions can be used as 'key=func' arguments in the min() and max() functions?

例如:

names = ['Rodrigo', 'Matthew', 'Adam', 'Will']


def get_len(name):
    return len(name)


print(max(names, key=get_len))
print(min(names, key=get_len))
# or
print(max(names, key=lambda name : len(name)))
print(min(names, key=lambda name : len(name)))

我怎么知道是否可以将函数用作 'key=func' 参数?

如文档中所述,min()(和 max())需要一个单参数排序函数,就像用于 list.sort() 的函数一样。 https://docs.python.org/3/library/functions.html#min

因此,我们期望的是一个函数,它从应用了 min()max() 的集合中获取单个参数,并且 returns 可以使用<>.

因此,对于 names,它是一个字符串列表,这将是一个函数,它接受一个 str 作为参数和 returns 可以使用 <> 对字符串进行排序,例如它的长度。

所以,即使这样也行得通:

names = ['Rodrigo', 'Matthew', 'Adam', 'Will']

print(max(names, key=len))

回答您的一般性问题“我如何知道是否可以将函数用作 min()key 参数?”

你检查函数是否:

  • 接受单个参数
  • 参数的类型与集合元素的类型匹配min()将应用于
  • returns 可以使用 <>
  • 排序的值

keyfunc 必须 return 具有定义的 __lt__(小于)操作的值。 max 将函数应用于 names 的每个元素,并且 return 是具有最大值的元素,由小于关系定义。如果 names 的多个元素测试不小于任何其他元素,则 max 将 return 第一个。

也许更简单的看待它的方法是,如果你的函数的 return 类型是可排序的(int、float、str 等),那么该函数是可用的。

你对 len(element) 的定义工作得很好——我希望你已经测试过了。