栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用'key'和lambda表达式的python max函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用'key'和lambda表达式的python max函数

lambda
是一个匿名函数,它等效于:

def func(p):   return p.totalScore

现在

max
变成:

max(players, key=func)

但是由于

def
语句是复合语句,因此不能在需要表达式的地方使用它们,这就是有时
lambda
使用的原因。

请注意,这

lambda
等效于您在的return语句中输入的内容
def
。因此,您不能在内使用语句
lambda
,仅允许使用表达式。


怎么

max
办?

max(a,b,c,… [,key = func])->值

使用单个可迭代的参数,返回其最大的项目。具有两个或更多参数,返回最大参数。

因此,它仅返回最大的对象。


key
工作如何?

在Python
2中,默认情况下

key
根据对象的类型根据一组规则比较项目(例如,字符串始终大于整数)。

要在比较之前修改对象,或基于特定的属性/索引进行比较,必须使用

key
参数。

范例1:

一个简单的示例,假设您有一个字符串形式的数字列表,但是您想按其整数值比较这些项目。

>>> lis = ['1', '100', '111', '2']

这里

max
使用它们的原始值比较项目(按字母顺序比较字符串,这样您就可以得到
'2'
输出):

>>> max(lis)'2'

要通过整数比较项目,请使用

key
简单的
lambda

>>> max(lis, key=lambda x:int(x))  # compare `int` version of each item'111'

示例2:应用于

max
元组列表。

>>> lis = [(1,'a'), (3,'c'), (4,'e'), (-1,'z')]

默认情况下,

max
将按第一个索引比较项目。如果第一个索引相同,则将比较第二个索引。在我的示例中,所有项目都有唯一的第一个索引,因此您将获得以下答案:

>>> max(lis)(4, 'e')

但是,如果您想通过索引1的值比较每个项目,该怎么办?简单:使用

lambda

>>> max(lis, key = lambda x: x[1])(-1, 'z')

比较包含不同类型对象的可迭代项

混合项目清单:

lis = ['1','100','111','2', 2, 2.57]

在Python
2中,可以比较两种不同类型的项目

>>> max(lis)  # works in Python 2'2'>>> max(lis, key=lambda x: int(x))  # compare integer version of each item'111'

但是在Python 3中,您不能再这样做了:

>>> lis = ['1', '100', '111', '2', 2, 2.57]>>> max(lis)Traceback (most recent call last):  File "<ipython-input-2-0ce0a02693e4>", line 1, in <module>    max(lis)TypeError: unorderable types: int() > str()

但这可行,因为我们正在比较每个对象的整数版本:

>>> max(lis, key=lambda x: int(x))  # or simply `max(lis, key=int)`'111'


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637730.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号