python排序sort()与sorted

一.函数形式

sorted(iterable, cmp, key, reverse)

s.sort(cmp, key, reverse)

参数:

  • cmp为用户定义的任何比较函数,函数的参数为任何两个可比较的元素(来自iterable或者list),函数根据第一个参数与第二个参数的关系依次返回-1、0、或者+1(第一个参数小于第二个参数则返回负数)。默认值为None
  • key使带一个参数的函数,用来为每个元素提取比较值,默认为None(即直接比较每个元素)
  • reverse表示排序结果是否反转,默认为False
  • [注]从函数的定义形式可以看出,sorted作用于任意可迭代的对象,而sort()一般作用于列表。

二.常规排序

a = [1, 2, 4, 2, 3]

a.sort()	

sorted(a)   
  • sort()直接修改原有列表,返回None
  • sorted()返回一个排序后的列表,原有列表保持不变

三.sorted()根据自定义规则排序,使用参数key

1.按长度排序
# 使用key,默认搭配lambda函数使用
chars =  ['is', 'a', 'handsome', 'oliver', 'boy']

#根据长度进行排序
sorted(chars,key=lambda x:len(x))
#Output: ['a', 'is', 'boy', 'oliver', 'handsome']

#按长度排序后反转
sorted(chars,key=lambda x:len(x),reverse=True)
#Output: ['handsome', 'oliver', 'boy', 'is', 'a']
2.按某位置的元素进行排序
#key=lambda x: x[1]中可以任意选定x中可选的位置进行排序
tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
sorted(tuple_list, key=lambda x: x[1]) 

#字典列表按字典的键值进行排序,负号表示逆序
persons = [{'name': 'Jon', 'age': 32}, {'name': 'Alan', 'age': 50},  {'name': 'Bob', 'age': 23}]
sorted(persons, key=lambda x: x['name'])
#Output: [{'name': 'Alan', 'age': 50}, {'name': 'Bob', 'age': 23}, {'name': 'Jon', 'age': 32}]
sorted(persons, key=lambda x: (x['name'], -x['age']))
#Output: [{'name': 'Alan', 'age': 50}, {'name': 'Bob', 'age': 23}, {'name': 'Jon', 'age': 32}]
3.按字典的键值进行排序
phonebook = {'Linda': 7750, 'Bob': 9345, 'Carol': 5834}
sorted(phonebook.items(), key=lambda x:x[1])
#Output: [('Carol', 5834), ('Linda', 7750), ('Bob', 9345)]
4.字典的键值为列表,按列表中某元素进行排序
mydict = {
	'Li':['M',7],
	'Zhang':['E',2],
	'Wang':['P',3],
	'Du':['C',2],
	'Ma':['C',9],
	'Zhe':['H',7]
}
sorted(mydict.items(),key=lambda x:x[1][1])
#Output: [('Zhang', ['E', 2]), ('Du', ['C', 2]), ('Wang', ['P', 3]), ('Li', ['M', 7]), ('Zhe', ['H', 7]), ('Ma', ['C', 9])]

四.sorted()使用operator 中的itemgetter方法进行自定义排序排序

1.按字典的值排序
from operator import itemgetter
phonebook = {'Linda': 7750, 'Bob': 9345, 'Carol': 5834}
sorted(phonebook.items(), key=itemgetter(1))
#Output:[('Carol', 5834), ('Linda', 7750), ('Bob', 9345)]
2.多维列表按列表中的字段排序
from operator import itemgetter
gameresult = [['Bob', 95.00, 'A'],['Alan', 86.0, 'C'],['Mandy', 82.5, 'A'], ['Rob', 86, 'E']]#姓名 成绩 等级
sorted(gameresult, key=itemgetter(1, 2)#第二个字段成绩相同时,按等级从低到高排序
#Output:[['Mandy', 82.5, 'A'], ['Alan', 86.0, 'C'], ['Rob', 86, 'E'], ['Bob', 95.0, 'A']]
发布了54 篇原创文章 · 获赞 17 · 访问量 9175

猜你喜欢

转载自blog.csdn.net/qq_41979513/article/details/103105630