排序的lambda键值语法

时间:2018-09-15 11:02:00

标签: python python-3.x list sorting lambda

student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]
sorted(student_tuples, key=lambda student: student[2])

此键值student[2],根据年龄对列表进行排序。

但是student_tuples[2]给出了整个第三元组('dave', 'B', 10)的值,而不是列表中的元组中的第三值。

所以,我感到困惑。 Lambda中给出的值不应该是student[x][2]吗?

4 个答案:

答案 0 :(得分:2)

key = lambda student: student[2]告诉sorted函数将要对student_tuples的元素进行排序的标准是什么。

因此,lambda函数接受调查student_tuples的每个元素(在这里称为student),然后接受其第二个元素student[2]。然后,列表按此元素的值排序。

换句话说,从数学上讲,student_tupleslambda函数的参数列表(三个元素的元组),而lambda函数提取每个参数的第三个元素一个。

另一方面,student_tuples[2]只是意味着您要从student_tuples中提取第三个元素。

我希望它能以某种方式阐明其工作原理。

答案 1 :(得分:1)

让我们假设

def fun(x):
    return x[2]
foo=[('x',1,2),('y',2,3),('r',1,9)] 
sorted(foo,key=fun)                                                         

在上面的每个fun调用中,foo的每个元组都传递给fun。在该元组中,我们采用第二个元素并对其进行排序。以同样的方式,在您提出的上述问题中,您的工作方式也相似根据这个。

答案 2 :(得分:0)

您需要了解多个要点。

  1. sorted(list_name)不会更改(更改)原始列表。
  2. sorted函数使用其第一个值对列表中的元素进行排序,直到并且除非您以 key 的形式提供标准。

例如在您的情况下,列表元素是元组,因此sorted函数将通过比较每个元组的第一个元素对这些元素进行排序。


如果要更改排序条件,则需要提供一个,然后sorted函数将根据您在键中定义的条件对元素进行排序

  1. lambda函数是动态函数,即您可以同时定义和调用一个函数。

所以,根据您的情况,写 sorted(student_tuples, key=lambda student: student[2])您正在告诉python根据标准对名为 student_tuples 的列表进行排序 键= lambda学生:学生[2] 这意味着它将比较列表中每个元组的第三个元素 student_tuples 并对其进行相应排序。


现在,让我回答您的问题,直到

  

不是lambda中给出的值,而是学生[x] [2]

答案是否定的,因为 student 只是lambda函数的一个参数。您可能已经写了 key = lambda x:x [2] 。 这只是意味着不是比较 x 进行排序,而是比较 x [2] ,即每个元素的第3个元素

答案 3 :(得分:0)

sorted()函数从旧列表创建新的排序列表。

student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
new_list=sorted(student_tuples, key=lambda student: student[2])
print(new_list)

#Result= [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]