免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4040 | 回复: 8
打印 上一主题 下一主题

这个max()中的key? [复制链接]

论坛徽章:
1
辰龙
日期:2014-12-31 15:27:13
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-01 18:04 |只看该作者 |倒序浏览
>>> array1 = range(10)
>>> print max(array1, key=lambda x: x > 3)
4

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


论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
2 [报告]
发表于 2015-06-02 09:05 |只看该作者
回复 1# 向上爬的蜗牛
这是因为你的
  1. key=lambda x:x>3
复制代码
,它在这里的用处变成了,当数据大于3的时候,比较结果为真,于是输出相应的值。
如果还不是很明白的话,你可以先把你的array做个reverse操作,然后,再用同样的max试一下,就明白了。

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
3 [报告]
发表于 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参数会在什么情况下会用到。

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
4 [报告]
发表于 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]

论坛徽章:
1
辰龙
日期:2014-12-31 15:27:13
5 [报告]
发表于 2015-06-02 14:17 |只看该作者
max('ah', 'bf', key=lambda x: x[1])
这个能自然懂。


但关于这个:max(range(10), key = lambda x: x>3)。你的说法好像跟2楼所要表达的一样,从实际来看貌似也真是这样。但有无官方文档的说法?

论坛徽章:
1
辰龙
日期:2014-12-31 15:27:13
6 [报告]
发表于 2015-06-02 14:18 |只看该作者
回复 4# ssfjhh

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


但关于这个:max(range(10), key = lambda x: x>3)。你的说法好像跟2楼所要表达的一样,从实际来看貌似也真是这样。但有无官方文档的说法?

论坛徽章:
1
辰龙
日期:2014-12-31 15:27:13
7 [报告]
发表于 2015-06-02 14:18 |只看该作者
回复 2# icymirror


谢谢回答


   

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
8 [报告]
发表于 2015-06-02 20:48 |只看该作者
向上爬的蜗牛 发表于 2015-06-02 14:18
回复 4# ssfjhh

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



有英文手册啊,但我是英语渣,看不懂,索性不看了,这个参数的功能也比较简单,试几个例子就全明白了,比看文档还准确。

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
9 [报告]
发表于 2015-06-02 21:06 |只看该作者
楼主给的这个例子好像比较不符合人的第一知觉。
想不出这个在什么情况下会用到啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP