在Python中提供了两个方法可以的对给定的列表进行排序,有两种方法:
方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本
方法2.用built-in函数sorted进行排序,返回副本,原始输入不变
示例:
li = [5,3,2,4]
第一种sort方法:
li.sort(reverse=True)
print(li)
第二种sorted函数:
a=sorted(li)
print(a)
sort(...)
L.sort( key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
注意,a.sort() 已改变其结构,b = a.sort() 是错误的写法!
sorted(iterable, /, *, key=None, reverse=False)
Return a new list containing all items from the iterable in ascending order.
参数说明:
(1) key参数
key也是接受一个函数,不同的是,这个函数只接受一个元素,形式如下:
def f(a):
return len(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
(2) reverse参数
接受False 或者True 表示是否逆序
练习1:按照元素长度排序
li = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
sorted(li,key=len)
print (li)
练习2:按照每个字典元素里面key为1的元素的值排序
li = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f2(x):
return x[1]
print(sorted(li,key=f2))
练习3:对由tuple组成的List排序
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
第一种方法:
print(sorted(students,key=lambda x:x[2]))
第二种方法:用operator函数来加快速度
from operator import itemgetter, attrgetter
print(sorted(students, key=itemgetter(2)))