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']]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值