python列表排序用 sort()和sorted()的区别
作者:宁萌Julie 发布时间:2021-11-27 10:36:20
前言:
内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(),帮助您选择合适的排序函数。
对列表排序时,既可以用 List.sort(),也可以用 sorted(List),这两个函数有什么不同呢?如何选择?我以前常常分不清这两个函数,等到程序报错了,才知道 sorted 写成 sort 了,List 不能写在 sort() 括号里。您是否也有这个困惑呢?那就一起通过例子来熟悉这两个函数吧,以后就知道应该怎么使用了。
1. 是否改变原列表
首先应用 List.sort()
对列表排序,
代码示例如下:
letters=['a','dc','ab','D']
print('before sort: letters:',letters)
result1=letters.sort()
print('after sort: result1:',result1)
print('after sort: letters:',letters)
运行结果为:
before sort: letters: ['a', 'dc', 'ab', 'D']
after sort: result1: None
after sort: letters: ['D', 'a', 'ab', 'dc']
可以看到,List.sort()
没有返回值,而是直接改变了原列表。这既是优点也是缺点。说它是优点呢,有时不需要再使用原列表,直接修改原列表可以节约内存空间,尤其当这个列表很大时。而它的缺点也正是因为改了原列表,新手在程序设计时容易忽视这一点,在后续程序中错误地操作列表,导致得不到预计的结果。
再来看一下应用 sorted(List)
对列表排序的效果,
代码示例如下:
letters=['a','dc','ab','D']
print('before sorted: letters:',letters)
result2=sorted(letters)
print('after sorted: result2:',result2)
print('after sorted: letters:',letters)
运行结果为:
before sorted: letters: ['a', 'dc', 'ab', 'D']
after sorted: result2: ['D', 'a', 'ab', 'dc']
after sorted: letters: ['a', 'dc', 'ab', 'D']
可以看到,sorted(List)
返回一个排序好的新列表,原列表不变。
依据上述对比,在选择排序函数时,我们需要考虑两点:
1.是否希望改变原列表,如果是,选择 sort()。如果原列表不能修改,选择 sorted()。
2.注意使用函数的返回值,或者说排序好的列表存在哪里。比如代码为 list2=list1.sort() 或者 function(list1.sort()),那么 list2 其实是 None,而不是排序好的列表。同理,
function()
函数的输入也是 None。list1 才是排序好的列表。
2.参数设置:key 和 reverse
看上面例子中列表 letters
的排序结果,发现 D 居然排在 a 的前面?这是因为 ASCII 码中大写英文字母排在小写英文字母的前面。那么,如果我们想实现按字母顺序,不区分大小写的排序,应该怎么办呢?
方法:可以设置 key 参数,对 sort() 和 sorted() 都适用。
比如:设置key=str.lower
,就是按字符的小写字母形式排序。
代码示例如下:
letters=['a','dc','ab','D']
letters.sort(key=str.lower)
print(letters)
运行结果为:
['a', 'ab', 'D', 'dc']
此外,默认是按升序排列。也可以设置reverse=True,
就是按降序排列。这一参数同样是对 sort() 和 sorted() 都适用。下面的代码示例同时设置了 key 和 reverse 参数。
letters=['a','dc','ab','D']
result=sorted(letters,key=str.lower,reverse=True)
print(result)
运行结果为:
['dc', 'D', 'ab', 'a']
3.输入数据类型
List.sort()
是列表对象(object
)的一个方法(method
),因此只能用于列表。
而sorted()
函数是 Python 语言的内置函数,可以用于 iterables,包括 列表(List),元组(Tuple),字典(Dict)等等。iterable 对象有一个特点,就是可以用在循环 for 语句中(例如上面例子的列表 letters,可以用在 for 语句中:for e in letters:)。
下面我们来看看不同数据类型应用 sorted()
函数的例子。需要注意的是,虽然 sorted() 的输入可以有多种类型,但是输出都是排序好的列表。
输入为元组(Tuple)时:
letters=('a','dc','ab','D')
result=sorted(letters)
print(result)
运行结果为:
['D', 'a', 'ab', 'dc']
输入为字符串(Str)时:
letters='dasf'
result=sorted(letters)
print(result)
运行结果为:
['a', 'd', 'f', 's']
从结果可以看出,输入为字符串时,输出为排序好的字符列表,单个字符为列表的一个元素。
输入为字典(Dict)时:
letters={'b':1,'a':3,'d':2,'c':1}
result=sorted(letters)
print(result)
运行结果为:
['a', 'b', 'c', 'd']
从结果可以看出,sorted()
函数输出的结果是对letters.key()
排序得到的列表。
参考:https://docs.python.org/3/howto/sorting.html
来源:https://blog.csdn.net/applebear1123/article/details/123645126
猜你喜欢
- 用python加“验证码”为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章。我大体看了一下,主要方法有几类:一类是通过对图片进
- 1. 在终端执行时设置使用哪些GPU(两种方式)(1) 如下(export 语句执行一次就行了,以后再运行代码不用执行)(2) 如下2. 代
- 一、使用 print() 函数在 Python 中,print() 函数支持格式化输出,与 C 语言的 printf 类似。1. 格式化输出
- 很多年前,我们就可以轻易的从很多国营商场、火车车厢、饭馆旅馆中看到墙上挂的那个小本本-意见薄,作为经营方与顾客沟通的
- 本文实例讲述了Django中实现点击图片链接强制直接下载的方法。分享给大家供大家参考。具体分析如下:当用户点击图片连接时,默认为在浏览器中直
- 相关推荐:完整的sql中文参考手册(chm)下载 DB2 提供了关连式资料库的查询语言 sql (Structured Query
- 一、制作播放器的思路制作一个多功能音乐播放器的思路确定播放器的需求和功能,例如支持哪些音频格式、播放列表管理、循环播放、暂停、进度条显示等等
- 问题作为一个负责几个服务器的数据库管理员,我接到许多电话是关于磁盘空间的。我所做的第一件事是找到可以缩小的数据文件来释放一些磁盘上的空间。我
- ConfigParser库的使用及遇到的坑背景:这几天想在接口测试中增加logging打印功能,在testerHome正好发现有人分享自己的
- Microsoft® SQL Server™ 2000 由一系列产品组成,不仅能够满足最大的数据处理系统
- 环境搭建准备工具:pyton3.5,selenium,phantomjs我的电脑里面已经装好了python3.5安装Seleniumpip3
- 如何使用数组来显示下拉菜单?可以这样,如下:Sub DoDropDown(Arr(), strSelName, 
- 本文实例讲述了Python闭包和装饰器用法。分享给大家供大家参考,具体如下:Python的装饰器的英文名叫Decorator,作用是完成对一
- 木马原理:入侵者使用诸如ASP图片木马生成器之类的工具将一张正常的图片与一个ASP木马文件合并成一个图片文件(即将对网站有害的ASP代码插在
- 用Python编写关于计算图形面积的代码实现,供大家参考,具体内容如下#寒假打卡28天第7天import mathclass Round()
- 本文实例讲述了python 并发下载器实现方法。分享给大家供大家参考,具体如下:并发下载器并发下载原理from gevent import
- 本文实例为大家分享了Golang实现断点续传的具体代码,供大家参考,具体内容如下1、将文件pic_src.jpg复制到pic_des.jpg
- python有时候需要清除字符串前后空格,而字符本身的空格不需要清除掉,那就不能用正则re.sub来实现。这时用到strip()函数用法:s
- 本文实例为大家分享了python编写简单计算器的具体代码,供大家参考,具体内容如下做一个计算器,这是我们想要的效果。1、准备工作导入time
- 最近想抢冰墩墩的手办和钥匙圈,但是同志们抢的速度太快了,无奈,还是自己写脚本吧。添加火狐浏览器插件Omnibug是一个插件,可以简化web度