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


猜你喜欢
- 1 简介今天我要给大家介绍的这个Python库prettymaps非常的有趣,基于它,我们只需要简单的代码就可以对地球上给定坐标和范围的任意
- 我所接触的多标签数据,主要包括两类:1、一张图片属于多个标签,比如,data:一件蓝色的上衣图片.jpg,label:蓝色,上衣。其中lab
- Python2.6+ 增加了str.format函数,用来代替原有的'%'操作符。它使用比'%'更加直观、灵
- 当我们学习python的时候,总会用到一些常用的模块,接下来我就详细讲解下利用两种不同的方式画饼状图。首先利用【Tkinter】中的canv
- 本文实例讲述了Python Django框架url反向解析实现动态生成对应的url链接。分享给大家供大家参考,具体如下:url反向解析:根据
- 一.Oracle日期和字符串互相转换1.1 日期转字符串1.1.1 yyyy年mm月dd日hh24時mi分ss秒手动拼接年月日select
- 1. 引言本文是数独游戏问题求解的第二篇,在前文中我们使用回溯算法实现了最简单版本的数独游戏求解方案。本文主要在前文解决方案的基础上,来思考
- views.py 视图文件 message = None all_message = UserMessage.obj
- 我们将学习如何通过一种称为修复的方法去除旧照片中的小噪音,笔画等。基本思路很简单:用相邻像素替换那些坏标记,使其看起来像邻域。cv2.inp
- 1. 引言在数据处理、机器学习等领域,我们经常需要对各式各样的数据进行处理,本文重点介绍三种非常简单的方法来检测数据集中的异常值。 
- golang是一种强类型语言,虽然在代码中经常看到这种写法,i:=10这其实这是编译器自动做了类型推断在编译期间。编译器会对数据进行类型检查
- 在没介绍正文之前先给大家补充点go语言基本知识及实例。Go 语言教程Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。G
- 前言又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool。下面话不多说了,来一起看看详细的介绍吧。先准备好:12306网站
- 创建工程时,选择已存在的环境(不要选择虚拟环境,虽然安全,但很慢)添加环境在 anaconda3/bin/python3.6 即 d:/an
- http-server是一个简单的命令行http服务器,基于nodejs,下载地址:https://nodejs.org/en/downlo
- 在使用Go语言进行开发的时候,有的时候可能要发送get或者post请求,下面我对post和get请求做一下简单的介绍:关于 HTTP 协议H
- 1.在Server端添加Silverlight-enabled WCF service [ServiceContract(Namespace
- 项目简介之前学python的时候 写了个游戏来练手 用的是 pygame 没有别的依赖只用了一两百行的代码就实现了 整体来说功能并不算完整项
- 继续Mootools常用方法扩展,依然还是String类的扩展。方法:unescapseHTML说明:这个上次忘了,和escapseHTML
- python处理按钮消息的实例详解