哪些函数可以用作 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)
的定义工作得很好——我希望你已经测试过了。
例如:
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)
的定义工作得很好——我希望你已经测试过了。