文章目录

  • 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 函数的使用相关推荐

  1. python sort函数返回值_python中 sort方法 和sorted函数

    sort和sorted在python中常用语列表(或类列表)的排序,但是在python中有所区别. 他们的唯一的共同点恐怕就是都可以对列表排序,区别: 1. sorted是python的内置函数,可以 ...

  2. python3中sort和sorted的区别详解

    sort和sorted的区别 虽然python3中sort()和sorted()都可以用来排序,但二者有以下两个最主要的区别: sort只能应用在列表list上,而sorted可以对所有可迭代的对象进 ...

  3. ajax 返回数组某个属性值,js中sort方法根据数组中对象的某一个属性值进行排序...

    1.一维数组排序 timeList=['2017-10-05','2017-10-01','2017-10-03','2017-10-02','2017-10-09']; timeList.sort( ...

  4. JS中sort方法排序

    JS中sort方法排序 一.数字排序(string类型) 二.数字排序(string类型和number类型) 三.混合排序(string.number和字母) 四.函数排序 五.数组对象排序 一.数字 ...

  5. html中的sort方法,JavaScript_javascript中sort() 方法使用详解,语法:arrayObject.sort(sortby);参 - phpStudy...

    javascript中sort() 方法使用详解 语法:arrayObject.sort(sortby):参数sortby可选.规定排序顺序.必须是函数. sort() 方法用于对数组的元素进行排序. ...

  6. python2与python3性能对比_对Python2与Python3中__bool__方法的差异详解

    对Python2与Python3中__bool__方法的差异详解 发布时间:2020-08-28 00:08:58 来源:脚本之家 阅读:74 作者:grey_csdn 学习Python面向对象编程的 ...

  7. list.sort() 方法可以用函数作 key 的参数

    我的CSDN主页 My Python 学习个人备忘录 我的博文推荐 list.sort() 方法可以用函数作 key 的参数 key = lambda x: len(x) #以字符串长度升序. key ...

  8. python中sort返回值_Python函数你真的都学会了吗?来看看这篇Python高阶函数!

    二.高阶函数 高级函数, 英文叫 Higher-order Function. 那么什么是高阶函数呢? 在说明什么是=高阶函数之前, 我们需要对函数再做进一步的理解! 2.1 函数的本质 函数的本质是 ...

  9. JavaScript中sort方法的使用及原理详解

    原生JS中提供了两个用来重排序的方法:reverse()和sort(),reverse()没什么好说的,就是直接使数组反转,例如下面的栗子: var arr = [1, 2, 3, 4, 5, -1, ...

  10. JS数组中SORT方法使用详解

    1.sort() 方法用类似Map原地算法对数组的元素进行排序,并返回数组,会改变原数组为排序好的数组(重点:会改变原数组) 2.arr.sort([compareFunction]) ①:该方法传入 ...

最新文章

  1. linux mysql 操作命令_linux的mysql操作命令
  2. SAP WM 共用同一个仓库号的2个存储地点之间转库
  3. 编辑器插件不生效在html中,关于6.04版本HTML编辑器插件使用问题!
  4. 力扣(LeetCode):字符串转换整数 (atoi)
  5. Cookiecutter
  6. JavaScript学习笔记 - 变量、作用域与内存问题
  7. 苹果隐私部门负责人:在iPhone上侧载应用会减少用户选择
  8. 百度搜索关键词纠错机制研究
  9. 理解mysql 底层原理
  10. 通信线路工程验收规范 gb51171-2016_一级建造师市政涉及到的相关规范汇总
  11. C语言编译-嵌入式系统
  12. GZip压缩的js文件IE6下面不能包含script标签
  13. FPGA:生成占空比可调的PWM波
  14. 人脸关键点检测PFLD
  15. Apache DolphinScheduler 3.0 正式版重磅发布
  16. 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?
  17. C2_W1_Lab01_Neurons_and_Layers
  18. Pycharm远程连接服务器(windows下远程修改服务器代码)
  19. 网页爬虫之页面解析-BeautifulSoup/XPath/pyquery使用
  20. mysql5.5版本 64位+界面工具中文破解版版(有教程)

热门文章

  1. indexof 的基本用法
  2. 一线互联网互联网架构师自述:GitHub标星10w+,2021最新Android笔经
  3. [TF进阶] 卷积神经网络
  4. SAS计算IV代码分享
  5. XHR 和 Fetch 的使用详解和区别总结
  6. 无法删除的文件夹怎么办?如何删除删不掉的文件夹
  7. 1005打印任务取消不了 hp_HP打印机打印时任务打印不了时无法取消
  8. Dhtmlx Gantt如何LightBox自定义表单元素
  9. 云计算与大数据作业 21大数据 刘佳琪
  10. 例说图解TCP/IP协议族--PKI与证书(7)之给思科路由器制作证书