lambda参数源自何处?

时间:2019-05-16 14:08:49

标签: python

我指的是为How to sort (list/tuple) of lists/tuples?提供的解决方案。

sorted_by_second = sorted(data, key=lambda tup: tup[1])

data.sort(key=lambda tup: tup[1])  # sorts in place

在任一排序函数中, tup 在哪里传递给lambda函数?

4 个答案:

答案 0 :(得分:1)

tuplambda的参数。

lambda tup: tup[1]

等效于:

def anonymous_func(tup):
    return tup[1]

答案 1 :(得分:1)

sort本身。 key参数是一个回调函数,sort在要排序的序列的每个元素上调用。它使您可以更简洁地编写如下内容:

new_data = [(tup[1], tup) for tup in data]
tmp  = sorted(data)
sorted_by_second = [orig for _, orig in tmp]

答案 2 :(得分:1)

在lambda函数lambda tup: tup[1]中,tup引用列表data的元素,而tup[1]引用该项的第二个元素。

将其传递给sorted函数时,告诉它使用列表中项目的第二个元素作为比较键,因此得到的结果是第二个元素上的排序列表

来自文档

  

key指定一个参数的功能,该参数用于从iterable中的每个元素中提取比较键(例如,key = str.lower)。默认值为无(直接比较元素)。

因此,行为如下

In [54]: data = [[4,5,6], [1,2,3], [7,8,9]]                                                                                                                                                             

In [55]: sorted_by_second = sorted(data, key=lambda tup: tup[1]) 

In [56]: sorted_by_second                                                                                                                                                                               
Out[56]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

请注意,您还可以使用operator.itemgetter执行相同的操作,这会自动从元组中选择第二个元素

In [60]: import operator  
In [64]: data = [[4,5,6], [1,2,3], [7,8,9]]                                                                                                                                                             
In [65]: sorted_by_second = sorted(data, key=operator.itemgetter(1))                                                                                                                                    
In [66]: sorted_by_second                                                                                                                                                                               
Out[66]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

答案 3 :(得分:0)

此处key是一个变换函数,应用于数组的每个元素以提供新值,然后将其用于对数组进行排序。从本质上讲,这使得应该将元素排序为基于key(a) < key(b)而不是a < b的元素。

list.sortsorted函数将分别为每个元素调用key