In [24]: alist=['math','python','java','cpp']
In [25]: sorted(alist,key=len)
Out[25]: ['cpp', 'math', 'java', 'python']
In [26]:
In [26]: sort_list=[(1,5),(2,4),(3,6)]
In [28]: sorted(sort_list,key=lambda x : x[1])
Out[28]: [(2, 4), (1, 5), (3, 6)]
In [31]: sort_tuple=([1,6],[2,5],[3,4])
In [33]: sorted(sort_tuple,key=lambda x:x[1])
Out[33]: [[3, 4], [2, 5], [1, 6]]
In [34]: sort_tuple=((1,6),(2,5),(3,4))
In [35]: sorted(sort_tuple,key=lambda x:x[1])
Out[35]: [(3, 4), (2, 5), (1, 6)]
# 可以看到sorted函数只把最外层的tuple转换成了list
我们传递给key的值是sort_list的每个元素的第二个值,这样就是按tuple的第二个值的值的大小排序。
这代表奥林匹克运动会的信息,(姓名,成绩,年龄),成绩满分为100分。
participant_list = [
('Alison', 50, 18),
('Terence', 75, 12),
('David', 75, 20),
('Jimmy', 90, 22),
('John', 45, 12)
]
我们将要按照成绩从高到低排列, 如果成绩相同,年龄小的排在前面。
所以这个问题要使用多个key值来排序,当第一个key值相同的情况下,再去比较第二个key值。
先来看几个小栗子,在python中,是可以直接比较tuple、list等。
In [37]: (1,4)<(1,3)
Out[37]: False
In [38]: (2,4)<(3,1)
Out[38]: True
In [39]: [1,3]>[2,2]
Out[39]: False
In [40]:
所以这个问题编程的时候也是要用多个key值去比较。
# 这代表奥林匹克运动会的信息,(姓名,成绩,年龄),成绩满分为100分。
participant_list = [
('Alison', 50, 18),
('Terence', 75, 12),
('David', 75, 20),
('Jimmy', 90, 22),
('John', 45, 12)
]
# 我们将要按照成绩从高到低排列, 如果成绩相同,年龄小的排在前面。
# 所以这个问题要使用多个key值来排序,当第一个key值相同的情况下,再去比较第二个key值。
In [40]: participant_list = [
...: ('Alison', 50, 18),
...: ('Terence', 75, 12),
...: ('David', 75, 20),
...: ('Jimmy', 90, 22),
...: ('John', 45, 12)
...: ]
In [42]: sorted(participant_list,key=lambda x:(100-x[1],x[2]))
Out[42]:
[('Jimmy', 90, 22),
('Terence', 75, 12),
('David', 75, 20),
('Alison', 50, 18),
('John', 45, 12)]
其中为什么要用100-x[1]呢,因为我们是要按照成绩从高到低排,但是sorted函数默认是从低到高排,所以100-x[1]最小的那个值就代表成绩最大的值。