Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列
一,最简单的排序
1.使用sort排序
my_list = [3, 5, 1, 4, 2] my_list.sort() print (my_list) #输出: [1, 2, 3, 4, 5]
使用sort()方法对list排序会修改list本身,不会返回新list.
sort()不能对dict字典进行排序
2.使用sorted()排序
my_list = [3, 5, 1, 4, 2] result = sorted(my_list) print (result) #输出: [1, 2, 3, 4, 5] my_dict = {"a":"1", "c":"3", "b":"2"} result = sorted(my_dict) print (result) #输出: ['a', 'b', 'c']
sorted()会生成一个新的列表或字典对象,对dict排序默认会按照dict的key值进行排序,最后返回的结果是一个对key值排序好的list
二,key参数
从python2.4开始,list.sort()和sorted()函数增加了key参数来指定一个函数,此函数将在每个元素比较前被调用
key参数的值为一个函数,此函数只有一个参数且返回一个值用来进行比较。这个技术是快速的因为key指定的函数将准确地对每个元素调用。
1.对复杂的元组排序
student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ] result = sorted(student_tuples, key=lambda student: student[2]) print (result) #输出 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
以上可以看出排序是按照10, 12, 15值进行排序的,因为函数lambda student:student[2]返回的值分别是10, 12, 15。
所以就用函数返回的值进行比较;key=15 ,key=12,key=10根据这些返回值进行比较;
lambda student:student[2] 等价于 def f(student): return student[2]
2.根据字典的value排序
默认sorted是对dict的key排序的,如果要根据dict的value排序就需要指定key参数了
my_dict = {"a":"2", "c":"5", "b":"1"} result = sorted(my_dict) print (result) #默认对dict排序,不指定key参数,会默认对dict的key值进行比较排序 #result输出: ['a', 'b', 'c'] result2 = sorted(my_dict, key=lambda x:my_dict[x]) print (result2) #指定key参数,根据dict的value排序 #result2输出:['b', 'a', 'c']
扩展用法:
1.Key Function:
从Python2.4开始,list.sort() 和 sorted() 都增加了一个 ‘key' 参数用来在进行比较之前指定每个列表元素上要调用的函数。
例如:
区分大小写的字符串比较排序:
> sorted("This is a test string from Andrew".split(), key=str.lower) ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
key应该是一个函数,其接收一个参数,并且返回一个用于排序依据的key。其执行效率很高,因为对于输入记录key function能够准确的被调用。
对于复杂的对象,使用对象的下标作为key。
例如:
> student_tuples = [ ... ('john', 'A', 15), ... ('jane', 'B', 12), ... ('dave', 'B', 10), ... ] > sorted(student_tuples, key=lambda student: student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
使用对象的属性进行操作:
例如:
> class Student: ... def __init__(self, name, grade, age): ... self.name = name ... self.grade = grade ... self.age = age ... def __repr__(self): ... return repr((self.name, self.grade, self.age)) > > student_objects = [ ... Student('john', 'A', 15), ... Student('jane', 'B', 12), ... Student('dave', 'B', 10), ... ] > sorted(student_objects, key=lambda student: student.age) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
总结
以上所述是小编给大家介绍的python中sort()与sorted()的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 《丁当 20首重量级歌曲 Fu Good 下一站天后 2CD》[WAV/分轨][650MB]
- 歌莉雅.2012-My.Voice.Story【环星】【FLAC分轨】
- 群星.1993-一曲成名·青春无悔【飞碟】【WAV+CUE】
- 刘德华.2000-爱无知(金装版)【NEWMELODY】【WAV+CUE】
- 许巍《时光漫步》1CD[FLAC/分轨][804.3MB]
- 群星《2024第一季度百度歌曲排行抖音榜top100》1CD[FLAC/分轨][2.3GB]
- 张柏芝《全新经验》[FLAC/分轨][450MB]
- 唐朝.2008-浪漫骑士【音乐家】【WAV+CUE】
- 张芸京.2016-失败的高歌【泡耳音乐】【WAV+CUE】
- 群星.1991-音乐工厂1·皇后大道东【音乐工厂】【WAV+CUE】
- 群星.1992-音乐工厂2·首都【音乐工厂】【WAV+CUE】
- 群星.1994-音乐工厂3·儿童乐园【音乐工厂】【WAV+CUE】
- 胡鸿钧.2021-ex:CHANGE【星梦娱乐】【WAV+CUE】
- 班得瑞原装进口《第一张新世纪专辑:仙境》1CD[APE/CUE分轨][292.3MB]
- 伍佰《摇滚教父 伍佰黄金精选 2CD》[WAV+CUE][990MB]