python max函数_使用'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 "", line 1, in

max(lis)

TypeError: unorderable types: int() > str()

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

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

'111'

2020-02-22

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值