下面的lambda函数如何代替Python排序函数中的“itemgetter”?

下面的lambda函数如何代替Python排序函数中的“itemgetter”?,python,sorting,lambda,Python,Sorting,Lambda,我有这段代码,它按照列表的第二项对列表进行排序——但是lambda函数实际上在做什么呢 sorted_list.sort(key=lambda x: x[1],reverse=True) 我得到了它们的基本属性;它们是匿名的、一次性的函数,但我不知道这里发生了什么。它是否将x作为参数并返回x[1]?它就是这样做的。在壳里做实验从来没有坏处。Lambda表达式是表达式。它们可以分配给变量,并通过以下方式进行测试: >>> f = lambda x:x[1] >>&

我有这段代码,它按照列表的第二项对列表进行排序——但是lambda函数实际上在做什么呢

 sorted_list.sort(key=lambda x: x[1],reverse=True)

我得到了它们的基本属性;它们是匿名的、一次性的函数,但我不知道这里发生了什么。它是否将x作为参数并返回x[1]?

它就是这样做的。在壳里做实验从来没有坏处。Lambda表达式是表达式。它们可以分配给变量,并通过以下方式进行测试:

>>> f = lambda x:x[1]
>>> f([4,6,2])
6
您也可以直接使用它:

>>> (lambda x:x[1])([4,6,2])
6

它就是这样做的。在壳里做实验从来没有坏处。Lambda表达式是表达式。它们可以分配给变量,并通过以下方式进行测试:

>>> f = lambda x:x[1]
>>> f([4,6,2])
6
您也可以直接使用它:

>>> (lambda x:x[1])([4,6,2])
6
是否将x作为参数并返回x[1]?这正是它所做的,是的

作为常规函数编写,lambda函数如下所示:

def sortkey(x):
    return x[1]
因此该函数等价于operator.itemgetter1

由于key函数的目的是返回排序键,因此,序列x中的第二个元素的结果键是列表将按其排序的元素。

是否将x作为参数并返回x[1]?这正是它所做的,是的

作为常规函数编写,lambda函数如下所示:

def sortkey(x):
    return x[1]
因此该函数等价于operator.itemgetter1

由于key函数的目的是返回sort key,因此结果key序列x中的第二个元素就是列表将被排序的元素。

sort在进行比较时调用key。也就是说,当sort将要比较序列中的两个值时,它使用key来处理从序列中的每个元素返回值的逻辑。不完全:key保证在序列中每个元素只调用一次,而不管使用该元素进行了多少次比较。这使得key函数优于它所取代的cmp方法,cmp方法在每次比较时都会调用。sort在进行比较时调用key。也就是说,当sort将要比较序列中的两个值时,它使用key来处理从序列中的每个元素返回值的逻辑。不完全:key保证在序列中每个元素只调用一次,而不管使用该元素进行了多少次比较。这就是关键函数优于它所取代的cmp方法的原因,cmp方法在每次比较时都被调用。