Chinaunix

标题: 这个max()中的key? [打印本页]

作者: 向上爬的蜗牛    时间: 2015-06-01 18:04
标题: 这个max()中的key?
>>> array1 = range(10)
>>> print max(array1, key=lambda x: x > 3)
4

请教,为什么是4?不理解其中的逻辑关系。



作者: icymirror    时间: 2015-06-02 09:05
回复 1# 向上爬的蜗牛
这是因为你的
  1. key=lambda x:x>3
复制代码
,它在这里的用处变成了,当数据大于3的时候,比较结果为真,于是输出相应的值。
如果还不是很明白的话,你可以先把你的array做个reverse操作,然后,再用同样的max试一下,就明白了。
作者: ssfjhh    时间: 2015-06-02 10:57
本帖最后由 ssfjhh 于 2015-06-02 10:57 编辑
icymirror 发表于 2015-06-02 09:05
回复 1# 向上爬的蜗牛
这是因为你的,它在这里的用处变成了,当数据大于3的时候,比较结果为真,于是输出 ...



一直都不知道max还有这个key参数,看到这个帖子才知道,感觉这个key参数很怪异,试了下,这个key参数就是输出第一个符合条件的值,诡异的是,如果iterable参数中没有任何值满足条件,竟然输出第一个值,想不出这个key参数会在什么情况下会用到。
作者: ssfjhh    时间: 2015-06-02 11:09
  1. # 还可以指定comparator function
  2. max('ah', 'bf', key=lambda x: x[1])
复制代码
网上搜了下,大概这个才是key参数的正确用法:返回key参数中的匿名函数返回的值中最大一个所对应的iterable参数中的值。

楼主给的这个例子
  1. max(range(10), key = lambda x: x>3)
复制代码
实际比较的是下面这个列表的最大值,并返回这个最大值所对应的range(10)这个iterable中对应的值。如果有多个满足的条件的值,则返回第一个,这也符合人的第一知觉。
[False, False, False, False, True, True, True, True, True, True]

作者: 向上爬的蜗牛    时间: 2015-06-02 14:17
max('ah', 'bf', key=lambda x: x[1])
这个能自然懂。


但关于这个:max(range(10), key = lambda x: x>3)。你的说法好像跟2楼所要表达的一样,从实际来看貌似也真是这样。但有无官方文档的说法?
作者: 向上爬的蜗牛    时间: 2015-06-02 14:18
回复 4# ssfjhh

max('ah', 'bf', key=lambda x: x[1])
这个能自然懂。


但关于这个:max(range(10), key = lambda x: x>3)。你的说法好像跟2楼所要表达的一样,从实际来看貌似也真是这样。但有无官方文档的说法?
作者: 向上爬的蜗牛    时间: 2015-06-02 14:18
回复 2# icymirror


谢谢回答


   
作者: ssfjhh    时间: 2015-06-02 20:48
向上爬的蜗牛 发表于 2015-06-02 14:18
回复 4# ssfjhh

max('ah', 'bf', key=lambda x: x[1])



有英文手册啊,但我是英语渣,看不懂,索性不看了,这个参数的功能也比较简单,试几个例子就全明白了,比看文档还准确。
作者: substr函数    时间: 2015-06-02 21:06
楼主给的这个例子好像比较不符合人的第一知觉。
想不出这个在什么情况下会用到啊。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2