lambda
被匿名函数,它是等效于:
def func(p):
return p.totalScore
现在max
变为:
max(players, key=func)
但作为def
语句是它们不能被用来复合语句,其中的表达是这就是为什么有时使用lambda
的原因。
请注意,lambda相当于您在def
的返回语句中放入的内容。因此,您不能在lambda
内使用语句,只允许使用表达式。
max做什么?
最大值(A,B,C,... [,键= FUNC]) - >值
使用单个可迭代参数,返回其最大项。有了两个或更多参数,返回最大的参数。
因此,它只是返回最大的对象。
How `key` works?
默认情况下在Python 2键比较基于基于所述对象的类型(例如,字符串总是比的整数)一个set of rules项目。
要在比较前修改对象或根据特定属性/索引进行比较,您必须使用key
参数。
例1:
一个简单的例子,假设你以字符串形式号码清单,而是要通过他们的整数值来比较这些项目。
>>> lis = ['1','100','111','2']
这里max
使用其原始值进行比较的项目(字符串字典顺序比较,所以你会得到'2'
作为输出):
>>> max(lis)
'2'
要通过与他们的整数值使用键比较的品种简单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 will会比较第一个索引的项目,如果第一个索引相同,那么它会比较第二个索引。正如我在示例中,所有的项目具有独特的第一个索引的话,你会得到这样的答案:
>>> max(lis)
(4, 'e')
但是,如果你想每个项目由值索引1比什么?操作简单,使用lambda
:
名单混合项目:
In Python 2 it is possible to compare items of two different types:
>>> max(lis, key = lambda x: x[1])
(-1, 'z')
在包含不同类型的对象的迭代比较项目
>>> max(lis) # works in Python 2
'2'
>>> max(lis, key=lambda x: int(x)) #compare integer version of each item
'111'
But in Python 3 you can't do that any more:
>>> 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'
哪一种Python版本? – charmlessCoin
您是否咨询过[documentation](http://docs.python.org/2/library/functions.html#max)? –
@charmlessCoin python 2.7.5 – Vijay