IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【Python】列表排序,用 sort() 还是 sorted()? -> 正文阅读

[数据结构与算法]【Python】列表排序,用 sort() 还是 sorted()?

内容提要:本文比较了 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

本文对您有帮助的话,请点赞支持一下吧,谢谢!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:49:54  更:2022-03-22 20:51:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:39:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码