前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python列表排序 list.sort方法和内置函数sorted

Python列表排序 list.sort方法和内置函数sorted

作者头像
Python碎片公众号
发布于 2021-02-26 06:30:24
发布于 2021-02-26 06:30:24
84000
代码可运行
举报
运行总次数:0
代码可运行

很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表.

这时候可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别.

一、list.sort方法

list.sort方法会就地排序列表,也就是说不会把原列表复制一份。这也是这个方法的返回值为None的原因,None提醒您,本方法不会新建一个列表。

在这种情况下返回None其实是Python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那它就应该返回 None,好让调用者知道传入的参数发生了变动,而且并未产生新的对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# coding=utf-8
list_a = [1, 2, 8, 3, 7, 9, 5, 7]
# sort()方法没有返回值
list_b = list_a.sort()
print("list_a: ", list_a)
print('list_b: ', list_b)

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list_a:  [1, 2, 3, 5, 7, 7, 8, 9]
list_b:  None

用返回None来表示就地改动这个惯例有个弊端,那就是调用者无法将其结果串联起来调用。而返回一个新对象的方法则正好相反,它们可以链式调用,从而形成连贯接口。

二、sorted内置函数

与 list.sort 相反,内置函数sorted会新建一个列表作为返回值。

这个方法可以接受任何形式的可迭代对象作为参数,甚至包括不可变序列或生成器,而不管sorted接受的是怎样的参数,它最后都会返回一个列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list_c = [1, 2, 8, 3, 7, 9, 5, 7]
# sorted内置函数会返回一个排序后的新列表
list_d = sorted(list_c)
print("list_c: ", list_c)
print('list_d: ', list_d)

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list_c:  [1, 2, 8, 3, 7, 9, 5, 7]
list_d:  [1, 2, 3, 5, 7, 7, 8, 9]

可以看到,使用内置函数sorted时,返回了一个新的列表,而原列表没有发生改变。

这有两种好处:

1.如果我们即需要使用原列表,也需要使用排序后的列表,或者当我们要将一个非列表的可迭代对象排序成列表,sorted都可以做到。

2.有返回值时,我们可以进行链式调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 可以对非列表的可迭代对象排序生成列表
str_e = 'python'
list_e = sorted(str_e)
print(list_e)
 
# 链式调用
str_f = '-'.join(sorted(str_e)).upper().split('-')
print(str_f)

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['h', 'n', 'o', 'p', 't', 'y']
['H', 'N', 'O', 'P', 'T', 'Y']

三、关键字参数key和reverse

不管是 list.sort 方法还是 sorted 函数,都有两个可选的关键字参数:

key:

接收一个只有一个参数的函数,这个函数会被用在序列里的每一个元素上,所产生的结果是排序算法依赖的对比关键字。

比如说,在对一些字符串排序时,可以用 key=str.lower 来实现忽略大小写的排序,或者是用key=len进行基于字符串长度的排序。key的默认值是恒等函数,也就是默认用元素自己的值来排序。

reverse:

reverse参数如果被设定为True,被排序的序列里的元素会以降序输出(也就是说从大到小排序),reverse的默认值是False。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
phone = ('HUAWEI', 'OPPO', 'MI', 'MEIZU', 'VIVO')
# 按长度进行排序
phone_list = sorted(phone, key=len)
print(phone_list)
 
phone_list_re = sorted(phone, key=len, reverse=True)
print(phone_list_re)

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI']
['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']

上面的代码中,第一次排序新建了一个按照长度排序的字符串列表。第二次排序由升序变成了降序。

细心的您应该可以发现,第二次的结果并不是第一次排序的结果的完全翻转。

OPPO和VIVO的长度都是4,reverse=True后,它们的相对位置跟第一次排序是一样的。这是什么原因呢?

sorted和list.sort背后的排序算法都是Timsort,它是一种自适应算法,会根据原始数据的顺序特点交替使用插入排序和归并排序,以达到最佳效率。

Python的排序算法Timsort是稳定的(知道这一点就可以了),意思是,如果两个元素比不出大小,在每次排序的结果里它们的相对位置是固定的。

因为用到的排序算法是稳定的,也就是说在长度一样时,OPPO和VIVO的相对位置不会改变。

关于list.sort()方法和sorted内置函数的使用,现在已经掌握了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python3的sorted和sort
python内置排序函数sorted,可以适用于所有可迭代的对象。而类型自有的sort函数只适用于类型本身。例如list.sort(),只适用于列表类型。另外,sort函数是在原来列表上直接进行排序,而sorted函数则是返回一个排序之后的列表。
zy010101
2022/05/05
3830
详解Python内置函数 !!!
语法:sorted(Iterable,key=函数(排序规则),reverse=False)
JOYCE_Leo16
2024/03/22
980
Python列表推导式
列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表.
Python碎片公众号
2021/02/26
7970
Python列表推导式
python-内置函数(搭配lambda使用)
目录 常用的内置函数 需要注意的知识点: enumerate()函数 map()函数 zip()函数 filter()函数 reduce()函数 sum()函数 max()/ min()函数 sort()函数 sorted()函数 内置函数一览表: 常用的内置函数 学习! 需要注意的知识点: 大部分内置函数经常搭配lambda函数使用 可迭代对象:字符串、列表、元组、字典、集合、文件对象 注意!!!! 在py3中部分函数的返回值是一个迭代器,不能多次遍历,(map、filter、z
HammerZe
2022/03/25
6920
python-内置函数(搭配lambda使用)
Python copy模块浅拷贝和深拷贝
对数据进行处理后,如果在后面的代码中,即需要使用修改之前的数据,也需要使用修改之后的数据,就要在修改前对数据进行拷贝。
Python碎片公众号
2021/02/26
4130
Python copy模块浅拷贝和深拷贝
英文 | 性能大比拼:list.sort()与sorted()
花下猫语:list.sort() 与 sorted(list) 是常用的列表排序方法,但是,你是否考虑过在占用内存与排序速度上,两者有啥优劣么?今天分享的文章对此做了详尽的考察。
Python猫
2019/05/06
1.8K0
英文 | 性能大比拼:list.sort()与sorted()
Python基础语法-内置函数和模块-常用内置函数(一)
Python是一种高级编程语言,拥有许多内置函数和模块,使得开发者能够轻松地完成各种任务。
玖叁叁
2023/04/18
2620
python基础教程:list(列表)
Python的基本数据类型有整数,浮点数,布尔,字符串,它们是最基本的数据。在实际编程中,我们要经常组织由很多基本数据组成的集合,这些集合的不同组织方式就是:数据结构,今天讲的是数据结构中的Python list(列表)。数据结构就是一些数据组合得到的“复合”数据类型。
一墨编程学习
2019/05/15
9700
2 Python 基础: 列表及字典内置函数&方法内容梳理
3.dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
野原测试开发
2019/09/03
1.1K0
2 Python 基础: 列表及字典内置函数&方法内容梳理
超强汇总:学习Python列表,只需这篇文章就够了
千里之行,始于足下。要练成一双洞悉一切的眼睛,还是得先把基本功扎扎实实地学好。今天,本喵带大家仔细温习一下Python的列表。温故而知新,不亦说乎。
Python猫
2019/04/10
4500
Python内置函数sorted()和列表方法sort()排序规则不得不说的事
Python内置函数sorted()和列表方法sort()可以使用key参数指定排序规则,并且都是稳定排序,也就是说,对于指定规则不能涵盖的元素,本来谁在前面,排好以后谁还是在前面。 直接用代码说话: >>> lst = [1, 3, 7, 5, 13, 11] # 不指定排序规则,按元素大小升序排列 >>> sorted(lst) [1, 3, 5, 7, 11, 13] # 指定按转换成字符串以后的长度排序 # 13和11的长度一样 # 本来13在前面,排好以后还在前面 >>> sorted(lst,
Python小屋屋主
2018/04/16
2.4K0
Python干货——内置函数(2)
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 👋大家好!我是你们的老朋友Java学术趴。任何的语言都离不开函数,都包括内置函数和自定义函数,函数的作用就是对功能进行封装以便于无效调用。 所谓内置函数就是可以直接拿过来使用的函数,Python已经帮我们内
Java学术趴
2022/06/04
1.3K0
Python干货——内置函数(2)
Python基础中的sort()和sorted()函数,傻傻分不清楚?
前几天在Python钻石交流群有个叫【小白_岸田】的粉丝问了一个Python基础的问题,这里拿出来给大家分享下,一起学习下。
前端皮皮
2022/08/17
2780
Python基础中的sort()和sorted()函数,傻傻分不清楚?
2 Python 基础: 列表及字典内置函数&方法内容梳理
3.dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
野原测试开发
2019/07/24
7430
2 Python 基础: 列表及字典内置函数&方法内容梳理
Python中sort与sorted函数
python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性的sorted()函数则对所有可迭代的序列都是适用的;
全栈程序员站长
2022/11/15
7000
这几个Python内置的高阶函数,真香
什么是高阶函数?,一句话,就是可以接受其他函数名称作为自己参数的函数。函数式编程说的就是这个。Python中一切皆对象,函数也是一个对象,可以作为变量名称传递给其他函数调用,高阶函数就是一种特殊的函数,有 5 个内置的函数可以大大提高我们的编程效率,分别是 sorted、filter、zip、map、reduce,这里除了 zip 函数,其他都是高阶函数。它们的用武之地非常广泛,要不也不会作为内置函数了。今天分享下它们的用法,掌握之后,你一定会觉得,真香!
somenzz
2020/11/25
4020
这几个Python内置的高阶函数,真香
python list的两种排序方法
1.使用list内建函数sort排序 list.sort(key=None,reverse=False)
py3study
2020/01/08
4960
python list排序
python 列表list中内置了一个十分有用的排序函数sort,sorted,它可以用于列表的排序,以下是例子。
py3study
2020/01/07
1.2K0
Python内置函数sorted()和列表方法sort()的排序原理
问题描述:在Python中,可以使用内置函数sorted()和列表方法sort()对数据进行排序,但要求所有数据支持关系运算符,也就是这些数据本身是可以比较大小的才能进行排序,除非使用key参数明确指定了排序规则。对于绝大多数内置类型的对象而言,同类型的对象之间基本上都是支持关系运算符的。但是如果要对自定义类型的对象进行排序,最好是实现__lt__()特殊方法,或者使用key参数明确指定规则。 代码功能:首先定义自定义Country类,具有国家名称和面积这两个数据成员,并且实现了特殊方法__lt__()来支
Python小屋屋主
2018/04/16
1.6K0
Python内置函数sorted()和列表方法sort()的排序原理
python set 排序_如何在Python中使用sorted()和sort()
所有程序员都必须编写代码来对项目或数据进行排序。排序对于应用程序中的用户体验至关重要,无论是按时间戳对用户的最新活动进行排序,还是按姓氏的字母顺序放置电子邮件收件人列表。Python的排序功能提供了强大的功能,可以在粒度级别进行基本排序或自定义排序。
用户7886150
2021/01/26
4.3K0
相关推荐
python3的sorted和sort
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验