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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

定义:

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大家一起来学习讨论吧!

sorted() 函数排序的利器 sorted()函数Python 中的内置函数,用于对可迭代对象进行排序。iterable:表示需要排序的可迭代对象,例如列表、元组、集合等。key:指定一个函数,用于生成排序的比较键。默认为None,表示直接比较元素本身。reverse:一个布尔值,用于指定排序顺序。默认为False,表示升序排序;设置为True则表示降序排序。1、keyreturn word[-1] # 按单词的最后一个字母排序 阅读详情

相关推荐

sort、sorted函数详解(含代码示例)

sort、sorted函数详解(python),基于官方文档的解释

freeline的博客 9442

PythonSorted()函数的key参数使用

升序排序是通过 key 参数指定了按照 Person 对象的 age 属性进行排序,而降序排序是通过 key 参数指定了按照 Person 对象的 name 属性的第一个字母的 ASCII 值进行排序。接下来,我们定义了一个自定义函数 sort_by_score,该函数的输入参数是一个学生信息,我们将该学生信息的成绩作为排序的关键字。通过将 sort_by_score 函数赋值给 sorted() 函数中的 key 参数,我们就实现了对学生列表按照学生成绩进行降序排序的目的。

豫州刺史 3558

干货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

MELATONIN_T的博客 1146

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万+

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

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

码农研究僧的博客 1万+

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

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

Python6886的博客 1255

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

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

weixin_39969881的博客 1072

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

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

weixin_39690401的博客 438

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

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

weixin_39719732的博客 207

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

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

weixin_39967938的博客 254

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

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

weixin_39925031的博客 578

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

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

weixin_39990138的博客 247

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

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

weixin_30764401的博客 550

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

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

weixin_29117669的博客 527

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

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

weixin_34928052的博客 3666

实用干货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 615

Python中对各种数据结构:列表、元组、字典(list、tuple、dict)进行排序,sort、sorted、heapq、Counter

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

qq_39839807的博客 3820

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值