Python - 使用Lambda进行排序(健全性检查)

4

以下是有关在使用sort方法时使用lambda的Python文档:

>>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
>>> pairs.sort(key=lambda pair: pair[1])
>>> pairs
[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')] 

所以,我希望确认一下我的理解是否正确:

在这个例子中,lambda表达式接受一个元组(在此例中为一个二元组),并根据元组的第二个元素(或者说第二个值,我不确定术语)进行排序。

由于第二个元素是一个字符串,排序会将'字母序较小'的值排列到集合的顶部。因此,输出结果中带有'字母序较小'的二元组出现在集合的顶部。

我的理解正确吗?


1
是的,你说得对。 - iBug
术语是词典顺序 - juanpa.arrivillaga
1
我投票关闭此问题,因为它只需要简单的是/否回答,并且已经提供了适当的答案。 - jhpratt
2个回答

1

没错。

key函数会在你排序的列表中的每个值上调用,排序顺序基于该调用的结果。字符串自然按字典序排序(就像你所说的“按字母顺序”),list.sort默认升序排序,因此你将得到所有元组的列表,这些元组按其第二个元素的升序字典顺序排列。

请注意,更常见的方法是使用operator.itemgetter方便函数。

from operator import itemgetter

my_list.sort(key=itemgetter(1))

我喜欢你的回答,虽然你在这里使用“更常见”一词有些宽泛,但我看到很多人在这种情况下使用lambda,而你想使用itemgetter的原因是lambda在每次迭代时都会被调用,从而定义一个新函数,进而变得更慢。请参见此处 - Jab
@Jaba itemgetter更快、更清晰、更实用,而且被广泛使用。我不确定你的挑剔是什么意思?根据我的经验,出于所有这些原因,itemgetter比一次性lambda更常用。 - Adam Smith
1
你是对的,我猜这更像是一个吹毛求疵的问题,关于人们在这样的任务中普遍使用lambda。我不是在挑起争端,我想这更像是对原帖的评论。 - Jab

0
没错,经过确认了。它根据每对元素的第二个元素进行排序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接