python sorted, sort函数自定义排序规则

  1. 可以传递len给形参key,这样就是按照元素的长度排序。
In [24]: alist=['math','python','java','cpp']

In [25]: sorted(alist,key=len)
Out[25]: ['cpp', 'math', 'java', 'python']

In [26]:
  1. 可以使用单个key值元素来排序,什么意思呢?举个栗子
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的第二个值的值的大小排序。

  1. 可以使用多个key值来排序

这代表奥林匹克运动会的信息,(姓名,成绩,年龄),成绩满分为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]最小的那个值就代表成绩最大的值。

你可能感兴趣的:(Python,算法与数据结构,python,sorted,sort)