Python干货:sorted()函数:列表元素排序

【干货】python sorted()函数详尽教程(附lambda函数教程)(上) 【干货】python sorted()函数超详尽教程(附lambda函数教程)(上) 作者: MELATONIN_T 目录【干货】python sorted()函数超详尽教程(附lambda函数教程)(上)0. 前言1. sorted()函数的介绍1.1 sorted()函数的作用1.1.0 概述1.1.1 sorted的排序规则数字字符串布尔值小结1.2 sorted()函数的参数2. 如何解决多排序规则问题3. lambda匿名函数的介绍4. 在sorted()中使用lambda 0. 前言 1. so 阅读详情

定义:

sorted() 函数对所有可迭代的对象进行排序操作。

内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

语法:

sorted 语法:

sorted(iterable, cmp=None, key=None, reverse=False)
复制代码

**返回值:**返回重新排序的列表。

参数说明:

  • iterable -- 可迭代对象。
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。无论是 sort() 还是 sorted() 函数,传入参数 key 比传入参数 cmp 效率要高。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

**cmp()**函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1

语法:

cmp( x, y )
复制代码

参数:

  • x -- 数值表达式。
  • y -- 数值表达式。

**reverse()**函数:用于反向列表中元素。

语法:

list.reverse()
复制代码

该方法没有返回值,但是会对列表的元素进行反向排序。

sorted 的使用方法:

1、默认情况下,sorted 函数将按列表升序进行排序,并返回一个新列表对象,原列表保持不变,最简单的排序。

>>> nums = [3,4,5,2,1]
>>> sorted(nums)
[1, 2, 3, 4, 5]
复制代码

2、降序排序,如果要按照降序排列,只需指定参数 reverse=True 即可

>>> sorted(nums, reverse=True)
[5, 4, 3, 2, 1]
复制代码

3、如果要按照某个规则排序,则需指定参数 key, key 是一个函数对象,例如字符串构成的列表,我想按照字符串的长度来排序

>>> chars = ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']

>>> sorted(chars, key=len)
['a', 'is', 'from', 'test', 'This', 'Andrew', 'string']
复制代码

len 是内建函数,sorted 函数在排序的时候会用len去获取每个字符串的长度来排序。 有些人可能使用匿名函数 key=lambda x: len(x) ,

4、如果是一个复合的列表结构,例如由元组构成的列表,要按照元组中的第二个元素排序,那么可以用 lambda 定义一个匿名函数。

>>> students = [('zhang', 'A'), ('li', 'D'), ('wang', 'C')]
>>> sorted(students, key=lambda x: x[1])
[('zhang', 'A'), ('wang', 'C'), ('li', 'D')]
复制代码

这里将按照字母 A-C-D 的顺序排列。

如果要排序的元素是自定义类,例如Student类按照年龄来排序,则可以写成

>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a)       # 保留原列表
>>> a 
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
 
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   # 利用cmp函数
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1])               # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
 
 
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2])            # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 
>>> sorted(students, key=lambda s: s[2], reverse=True)       # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>>
复制代码

6、和数据库的排序一样,sorted 也可以根据多个字段来排序,例如我有先要根据age排序,如果age相同的则根据grade排序,则可以使用元组:

>>> sorted(student_objects, key=lambda t:(t.age, t.grade))
[('dave', 'B', 10), ('lily', 'A', 12), ('jane', 'B', 12), ('john', 'A', 15)]
复制代码

7、同样的,对于自定义类,也有一种更高效的方法指定key

>>> from operator import attrgetter
>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
复制代码

如果参与排序的字段有两个怎么办?

>>> sorted(student_objects, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
复制代码

8、前面碰到的排序场景都是建立在两个元素是可以互相比较的前提下,例如数值按大小比较, 字母按顺序比较。

如果遇到本身是不可比较的,需要我们自己来定义比较规则的情况如何处理呢?

>>> nums = [2, 1.5, 2.5, '2', '2.5']
>>> sorted(nums)
TypeError: '<' not supported between instances of 'str' and 'int'
复制代码

一个整数列表中,可能有数字,字符串,在Python3中,字符串与数值是不能比较的,而Python2中任何类型都可以比较,这是两个版本中一个很大的区别:

# python2
>>> "2.5" > 2
True

# python3
>>> "2.5" > 2
TypeError: '>' not supported between instances of 'str' and 'int'
复制代码

9、关于 sorted 函数,当遇到需要自定义比较操作的数据,Python2和Python3之间的区别是:

Python2中的sorted 可以指定cmp关键字参数,可以通过 cmp=compare 来实现,

Python3中还需要导入functools.cmp_to_key实现

sorted()函数使用范围:

  • 对字典进行排序(中根据字典的值进行排序)
  • 多维list排序
  • 字典中混合list排序
  • List 中混合字典排序
  • 对字符串进行排序

sort()与sorted()的区别

1、相比于 sort(),sorted() 使用的范围更为广泛,两者的函数形式分别如下:

sorted(iterable[, cmp[, key[, reverse]]]) 
s.sort([cmp[, key[, reverse]]]) 
复制代码

2、sorted() 作用于任意可迭代的对象,而 sort()一般作用于列表。

>>> a = (1,2,4,2,3)
>>> a.sort()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'sort'
>>> sorted(a)
[1, 2, 2, 3, 4]
复制代码

下面的例子中针对元组使用 sort() 方法会抛出 AttributeError,而使用 sorted() 函数则 没有这个问题。

3、当排序对象为列表的时候两者适合的场景不同。sorted() 函数会返回一个排序后的列表,原有列表保持不变;而 sort() 函数会直接修改原有列表,永久改变,无法返回,函数返回为 None。

>>> a=['1',1,'a',3,7,'n']
>>> sorted(a)
[1, 3, 7, '1', 'a', 'n']
>>> a
['1', 1, 'a', 3, 7, 'n']
>>> print a.sort()
None
>>> a
[1, 3, 7, '1', 'a', 'n']
复制代码

如果实际应用过程中需要保留原有列表,使用 sorted() 函数较为适合,否则可以选择sort() 函数,因为 sort() 函数不需要复制原有列表,消耗的内存较少,效率也较高。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

想要获取更多Python学习资料可以加QQ:2955637827私聊或加Q群630390733大家一起来学习讨论吧!

Python中对各种数据结构:列表、元组、字典(list、tuple、dict)进行排序,sort、sorted、heapq、Counter Python 中对数据进行排序是非常简单的,其内置了列表 list 的排序方法 sort,同时还内置了 sorted 方法,不仅可以对 list 排序,还可以对 tuple 和 dict 排序。不仅如此,关于排序 Python 还提供其它的选择,以应对更多的场景,如:heapq 、collection.Counter 。 sort sort 是对 list 进行原地址排序,也就是改变原有的 lis... 阅读详情

相关推荐

从充电管理芯片里‘偷师’:拆解一个PMOS双向开关电路,搞定你的固态继电器需求

本文深入解析了PMOS双向开关电路在固态继电器应用中的设计要点,重点探讨了防电流倒灌和高侧双向开关的实现技巧。通过拆解充电管理芯片中的PMOS背靠背结构,工程师可以构建高效可靠的固态开关方案,适用于智能硬件和电池管理系统。文章还提供了关键参数选择、电路优化建议及实测数据对比,助力解决电源防反接等工程难题。

weixin_33698043的博客 480

Python基础之sorted()函数用法

本篇是关于sorted()函数的一些基本用法,如有不足缺陷欢迎补充指正。 1、简单的排序 sorted函数可以对可迭代类型的容器内的数据进行排序 lst1 = (5,4,3,2,1) lst2 = ('F','D','Y','e','a','v')#字符串类型的排序按照ASCII的大小进行比较 L1 = sorted(lst1) L2 = sorted(lst2) print(L1) print(L2) >>>[1, 2, 3, 4, 5] ['D', 'F', 'Y', 'a', 'e'

chaojishuike的博客 6万+

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 518

python关于sorted排序函数详细解析 附实战代码(全)

单独对一个函数进行分析,要么是算法所需,要么是项目所需(我是第二者) ,需求是对redis数据库中的存储进行排序,最新的列表通过表单显示放在最前面(在下面的项目实战中也会讲到逻辑思路),先看看函数以及拓展怎么使用

码农研究僧的博客 1万+

AB相增量式编码器以及STM32定时器编码器模式测速/测距离(HAL库)

编码器(Encoder)是一种用于测量旋转运动或位置的设备。编码器通常与定时器模块一起使用,以便在微控制器中获取和计算旋转的脉冲数量,从而确定物体的运动方向和距离。编码器在许多应用中都很有用,例如机器人运动控制、电机位置反馈和位置传感。STM32微控制器提供了多种类型的编码器支持,其中一种常见的编码器类型是增量编码器。增量编码器基于两个脉冲信号通道,通常称为A相和B相。当旋转发生时,这两个信号通道的相位关系会发生变化,从而可以计算出旋转方向和旋转的步数。

嵌入式软件工程师的博客 1万+

京东商品数据爬取实战:用Selenium+代理IP绕过最新反爬机制(附完整代码)

本文深入解析京东商品数据采集技术,详细介绍了如何利用Selenium与智能反反爬策略绕过京东最新的反爬机制。通过实战案例和完整代码,帮助开发者掌握高效采集京东商品数据的方法,包括动态参数加密、行为验证识别及分布式采集架构设计等关键技术。

cc789的博客 1058

Python 中的 sorted() 函数:排序的利器

sorted()函数是 Python 中的一个内置函数,用于对可迭代对象进行排序。该函数返回一个新的列表,其中包含了按照指定排序规则排序后的原始数据。sorted()iterable是要排序的可迭代对象,例如列表、元组、集合等。key是一个可选参数,用于指定排序时要应用的函数。reverse是一个可选参数,用于指定排序顺序,True 表示降序,False 表示升序(默认为 False)。sorted()函数通过指定key参数来定义自定义排序规则。在这个示例中,定义了一个匿名函数作为key。

GitHub_miao的博客 5694

NA400与昆仑通态MODBUS/TCP通讯调试说明

点击增加设备通道,弹出窗口进行设置,通道类型选择“0区输出继电器”,通道地址为1,通道个数为1,读写方式为读写。点击增加设备通道,弹出窗口进行设置,通道类型选择“4区输出寄存器”,数据类型选择“16位 无符号二进制”,通道地址为21001,通道个数为1,读写方式为读写。5.添加设备通道:双击莫迪康MODBUSTCP子设备,点击添加设备通道,根据Modbus规约地址表进行参数的设置,表格可在NAPro软件帮助中查看,如下图所示。然后可以在设备通道调试数据中观察到Q1的值为1,NW1的值678,表示通讯成功。

weixin_44281509的博客 2490

掌握排序的艺术:Python中sorted()函数全面解析!

冒泡排序是一种简单的排序算法,通过多次遍历比较相邻元素并交换来实现排序。# 冒泡排序示例代码return arrprint("冒泡排序结果:", sorted_arr)排序算法在计算机科学和编程中扮演着至关重要的角色,sorted()函数是 Python 中最为灵活和便捷的排序工具之一。本文介绍了几种经典的排序算法,例如冒泡排序、插入排序、选择排序、快速排序和归并排序。每个算法都有其独特的优势和特点,对不同类型的数据和场景有不同的适用性。sorted()

涛哥聊Python 6733

这款值68亿的游戏,你不实战一下吗?安排!

本文介绍了如何使用Cocos开发传送带像素消除类游戏。游戏包含像素画、传送带、炮台等核心元素,需要先解析图片生成像素数据,再通过关卡编辑器设计关卡机制。炮台会在传送带上环绕运动,发射子弹消除匹配颜色的像素点。文章详细讲解了游戏对象实现方法,包括像素生成、传送带运动轨迹、炮台瞄准算法等,并展示了实战效果。完整源码已集成到亿元Cocos小游戏实战合集中,适合对像素消除游戏开发感兴趣的开发者参考。

lsw_Cs的博客 437

Simulink中搭建一个包含PID控制的压电陶瓷快反镜模型

这个模型只是一个基本框架,你需要根据实际的系统参数和要求进行调整和优化。希望这些步骤能帮助你在Simulink中搭建所需的模型。

AI的内部世界的博客 474

Python中的排序函数--sorted()函数

选择题 以下python代码输出什么? a = [2,3,1] sorted(a) print(a) A a B [3, 2, 1] C [2, 3, 1] D [1, 2, 3] 问题解析 1.sorted()函数可以对所有可迭代的对象进行排序操作。题目中,sorted()函数提供了一个新的有序的输出结果,并且不改变原始值的顺序。所以使用print()语句输出列表a,结果仍是原来a的排序。 2.sorted()函数是一个内置函数,可以直接使用。sorted()语法(应用于Python 3.x): so

liujingwei8610的专栏 6万+

最新Python爬虫实战(入门爬虫篇)——案例17:某天气网40天天气预报数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过分析某天气网的数据接口,成功实现了对40天天气预报数据的批量采集。抓包分析:利用浏览器开发者工具找到隐藏的JSONP数据接口,掌握URL构成规律。请求模拟:构造带有Referer和User-Agent的请求头,添加时间戳参数避免缓存,获取原始数据。数据解析:处理JSONP格式,去除前缀后使用json模块解析,提取所需字段并规范化日期格式。数据存储:利用pandas将结构化数据保存为Excel文件,便于后续分析和使用。动态数据接口的发现与分析JSONP数据的清洗与解析。

努力让自己发光,对的人才能迎着光而来 22万+

Python小白干货宝典:sorted()函数:列表元素排序

定义: sorted()函数对所有可迭代的对象进行排序操作。 内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 语法: sorted 语法: sorted(iterable, cmp=None, key=None, reverse=False) 返回值:返回重新排序的列表。 参数说明: iterable -- 可迭代对象。 cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则.

Python6886的博客 1262

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python 列表元素分行显示_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_39969881的博客 1074

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python3列表 排序_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_39690401的博客 441

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python 列表元素分行显示_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_39719732的博客 210

python动物重量排序_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_39925031的博客 579

python排名函数_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted()函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_39967938的博客 254

python3 字典 排序_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_39990138的博客 248

c++ 多个字符串排序_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_30764401的博客 552

c++ 多个字符串排序_Python小白干货宝典:sorted()函数:列表元素排序

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_29117669的博客 529

python动物重量排序_python动物重量排序_Python小白干货宝典:sorted()函数:列表元素排序...

定义:sorted() 函数对所有可迭代的对象进行排序操作。内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。语法:sorted 语法:sorted(iterable, cmp=None, key=None, reverse=False)返回值:返回重新排序的列表。参数说明:iterable -- 可迭代对象。cmp -- 比较的函数,这个具有两个参数,参数的...

weixin_34928052的博客 3667

实用干货,python列表排序sort()和sorted()的区别

sort()是列表类型的方法,只适用于列表;sorted()是内置函数,支持各种容器类型。它们都可以排序,且用法类似,但sort()是在原地排序的,不会返回排序后的列表,而sorted()是返回新的排序列表。 1 >>> help(list.sort) 2 Help on method_descriptor: 3 4 sort(...) 5 L.sort(key=None, r...

web开发与Python 616

list排序sort降序_实用干货,python列表排序sort()和sorted()的区别?

sort()是列表类型的方法,只适用于列表;sorted()是内置函数,支持各种容器类型。它们都可以排序,且用法类似,但sort()是在原地排序的,不会返回排序后的列表,而sorted()是返回新的排序列表。1 >>> help(list.sort)2 Help on method_descriptor:34 sort(...)5 L.sort(key=None, reverse...

weixin_39801202的博客 253
上一篇: Python-其他-round()保留小数位时遇到的问题
下一篇: Python 反序列化漏洞学习笔记
pythonputao
博客等级 码龄6年 60粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值