python3 中 sort 方法与 sorted 函数的使用
文章目录
- 1 基本形式
- 2 复杂列表
- 2.1 列表内容是元组
- 2.2 列表内容是类
- 2.3 列表内容是字典
- 2.4 itemgetter 与 attrgetter
- 3 对字典排序
- 4 cmp_to_key(自定义的比较函数)
Python list 内置 sort() 方法用来排序,也可以用 python 内置的全局 sorted() 方法来对可迭代的序列排序生成新的序列。
1 基本形式
列表有自己的 sort 方法,其对列表进行原址排序。元组不行,元组不可修改
>>> a = [3,6,1,8,0,5,7,9,2,4]
>>> a.sort()
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a = [3,6,1,8,0,5,7,9,2,4]
>>> res = sorted(a)
>>> a
[3, 6, 1, 8, 0, 5, 7, 9, 2, 4]
>>> res
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 复杂列表
2.1 列表内容是元组
student = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),
]
res = sorted(student, key=lambda student: student[2]) # sort by age
print(res)
运行结果:
2.2 列表内容是类
class Student:def __init__(self, name, grade, age):self.name = nameself.grade = gradeself.age = agedef __repr__(self):return repr((self.name, self.grade, self.age))students = [Student('john', 'A', 15),Student('jane', 'B', 12),Student('dave', 'B', 10),
]res = sorted(students, key=lambda s: s.age)
print(res)
2.3 列表内容是字典
student = [{"name": "xiaoming", "score": 60},{"name": "daxiong", "score": 20},{"name": "maodou", "score": 30},
]res = sorted(student, key=lambda d:d['score'])
print(res)
2.4 itemgetter 与 attrgetter
Python 提供了 operator.itemgetter 和 attrgetter 提高执行速度
from operator import itemgetter, attrgetterstu = [("A", 30),("B", 20),("C", 10)
]print(sorted(stu, key=itemgetter(1)))
#operator提供了多个字段的复杂排序,先对第0个字段排序,再对第一个字段排序
print(sorted(stu, key=itemgetter(0,1)))
from operator import itemgetter, attrgetter
class Student:def __init__(self, name, grade, age):self.name = nameself.grade = gradeself.age = agedef __repr__(self):return repr((self.name, self.grade, self.age))stu = [Student('jane', 'B', 12),Student('john', 'A', 12),Student('dave', 'B', 10),
]
# 对students按照年龄排序
print(sorted(stu, key=attrgetter('age')))
# 其等价于
print(sorted(stu, key=lambda o: o.age))# 也可以按多个key排序, 先按age再按grade排序
print(sorted(stu, key=attrgetter('age', 'grade')))
运行结果:
3 对字典排序
对字典排序返回的是列表,可以对 key 进行排序,可以对 value 进行排序,也可以对 items 进行排序
d = {1: 'D', 2: 'C', 3: 'B', 4: 'A'}
print(sorted(d))
print(sorted(d.values()))
print(sorted(d.items()))
运行结果
4 cmp_to_key(自定义的比较函数)
python3 以后,sort 方法和 sorted 函数中的 cmp 参数被取消,此时如果还需要使用自定义的比较函数,那么可以使用 cmp_to_key 函数。与接受 key function 的工具一同使用(如 sorted(),min(),max(),heapq.nlargest(),itertools.groupby())
from functools import cmp_to_keya = [3, 6, 1, 8, 0, 5, 7, 9, 2, 4]def cmp(x, y):if x > y:return -1elif x < y:return 1else:return 0b = sorted(a, key=cmp_to_key(cmp))
print(b)
运行结果
python3 中 sort 方法与 sorted 函数的使用相关推荐
- python sort函数返回值_python中 sort方法 和sorted函数
sort和sorted在python中常用语列表(或类列表)的排序,但是在python中有所区别. 他们的唯一的共同点恐怕就是都可以对列表排序,区别: 1. sorted是python的内置函数,可以 ...
- python3中sort和sorted的区别详解
sort和sorted的区别 虽然python3中sort()和sorted()都可以用来排序,但二者有以下两个最主要的区别: sort只能应用在列表list上,而sorted可以对所有可迭代的对象进 ...
- ajax 返回数组某个属性值,js中sort方法根据数组中对象的某一个属性值进行排序...
1.一维数组排序 timeList=['2017-10-05','2017-10-01','2017-10-03','2017-10-02','2017-10-09']; timeList.sort( ...
- JS中sort方法排序
JS中sort方法排序 一.数字排序(string类型) 二.数字排序(string类型和number类型) 三.混合排序(string.number和字母) 四.函数排序 五.数组对象排序 一.数字 ...
- html中的sort方法,JavaScript_javascript中sort() 方法使用详解,语法:arrayObject.sort(sortby);参 - phpStudy...
javascript中sort() 方法使用详解 语法:arrayObject.sort(sortby):参数sortby可选.规定排序顺序.必须是函数. sort() 方法用于对数组的元素进行排序. ...
- python2与python3性能对比_对Python2与Python3中__bool__方法的差异详解
对Python2与Python3中__bool__方法的差异详解 发布时间:2020-08-28 00:08:58 来源:脚本之家 阅读:74 作者:grey_csdn 学习Python面向对象编程的 ...
- list.sort() 方法可以用函数作 key 的参数
我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 list.sort() 方法可以用函数作 key 的参数 key = lambda x: len(x) #以字符串长度升序. key ...
- python中sort返回值_Python函数你真的都学会了吗?来看看这篇Python高阶函数!
二.高阶函数 高级函数, 英文叫 Higher-order Function. 那么什么是高阶函数呢? 在说明什么是=高阶函数之前, 我们需要对函数再做进一步的理解! 2.1 函数的本质 函数的本质是 ...
- JavaScript中sort方法的使用及原理详解
原生JS中提供了两个用来重排序的方法:reverse()和sort(),reverse()没什么好说的,就是直接使数组反转,例如下面的栗子: var arr = [1, 2, 3, 4, 5, -1, ...
- JS数组中SORT方法使用详解
1.sort() 方法用类似Map原地算法对数组的元素进行排序,并返回数组,会改变原数组为排序好的数组(重点:会改变原数组) 2.arr.sort([compareFunction]) ①:该方法传入 ...
最新文章
- linux mysql 操作命令_linux的mysql操作命令
- SAP WM 共用同一个仓库号的2个存储地点之间转库
- 编辑器插件不生效在html中,关于6.04版本HTML编辑器插件使用问题!
- 力扣(LeetCode):字符串转换整数 (atoi)
- Cookiecutter
- JavaScript学习笔记 - 变量、作用域与内存问题
- 苹果隐私部门负责人:在iPhone上侧载应用会减少用户选择
- 百度搜索关键词纠错机制研究
- 理解mysql 底层原理
- 通信线路工程验收规范 gb51171-2016_一级建造师市政涉及到的相关规范汇总
- C语言编译-嵌入式系统
- GZip压缩的js文件IE6下面不能包含script标签
- FPGA:生成占空比可调的PWM波
- 人脸关键点检测PFLD
- Apache DolphinScheduler 3.0 正式版重磅发布
- 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?
- C2_W1_Lab01_Neurons_and_Layers
- Pycharm远程连接服务器(windows下远程修改服务器代码)
- 网页爬虫之页面解析-BeautifulSoup/XPath/pyquery使用
- mysql5.5版本 64位+界面工具中文破解版版(有教程)