Python 序列构成的数组(list.sort方法和内置函数sorted)

list.sort方法和内置函数sorted

list.sort 方法会就地排序列表,也就是说不会把原列表复制一份。这

也是这个方法的返回值是 None 的原因,提醒你本方法不会新建一个列

表。在这种情况下返回 None 其实是 Python 的一个惯例:如果一个函数

或者方法对对象进行的是就地改动,那它就应该返回 None,好让调用

者知道传入的参数发生了变动,而且并未产生新的对象。例

如,random.shuffle 函数也遵守了这个惯例。

用返回 None 来表示就地改动这个惯例有个弊端,那就是调用
者无法将其串联起来。而返回一个新对象的方法(比如说 str 里的
所有方法)则正好相反,它们可以串联起来调用,从而形成连贯接
口(fluent interface)。

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

值。这个方法可以接受任何形式的可迭代对象作为参数,甚至包括不可

变序列或生成器。而不管 sorted 接受的是怎样的参

数,它最后都会返回一个列表。

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

数。

reverse

如果被设定为 True,被排序的序列里的元素会以降序输出(也就

是说把最大值当作最小值来排序)。这个参数的默认值是 False。

key

一个只有一个参数的函数,这个函数会被用在序列里的每一个元素

上,所产生的结果将是排序算法依赖的对比关键字。比如说,在对一些

字符串排序时,可以用 key=str.lower 来实现忽略大小写的排序,或

者是用 key=len 进行基于字符串长度的排序。这个参数的默认值是恒等函数(identity function),也就是默认用元素自己的值来排序。

可选参数 key 还可以在内置函数 min() 和 max() 中起作用。
另外,还有些标准库里的函数也接受这个参数,像
itertools.groupby() 和 heapq.nlargest() 等。

下面通过几个小例子来看看这两个函数和它们的关键字参数

复制代码
>>> fruits = ['grape', 'raspberry', 'apple', 'banana']
>>> sorted(fruits)
['apple', 'banana', 'grape', 'raspberry'] ➊
>>> fruits
['grape', 'raspberry', 'apple', 'banana'] ➋
>>> sorted(fruits, reverse=True)
['raspberry', 'grape', 'banana', 'apple'] ➌
>>> sorted(fruits, key=len)
['grape', 'apple', 'banana', 'raspberry'] ➍
>>> sorted(fruits, key=len, reverse=True)
['raspberry', 'banana', 'grape', 'apple'] ➎
>>> fruits
['grape', 'raspberry', 'apple', 'banana'] ➏
>>> fruits.sort() ➐
>>> fruits
['apple', 'banana', 'grape', 'raspberry'] ➑

❶ 新建了一个按照字母排序的字符串列表。

❷ 原列表并没有变化。

❸ 按照字母降序排序。

❹ 新建一个按照长度排序的字符串列表。因为这个排序算法是稳定

的,grape 和 apple 的长度都是 5,它们的相对位置跟在原来的列表里是

一样的。

❺ 按照长度降序排序的结果。结果并不是上面那个结果的完全翻转,

因为用到的排序算法是稳定的,也就是说在长度一样时,grape 和 apple

的相对位置不会改变。

❻ 直到这一步,原列表 fruits 都没有任何变化。

❼ 对原列表就地排序,返回值 None 会被控制台忽略。

❽ 此时 fruits 本身被排序。

已排序的序列可以用来进行快速搜索,而标准库的 bisect 模块给我们

提供了二分查找算法。下一节会详细讲这个函数,顺便还会看看

bisect.insort 如何让已排序的序列保持有序。

相关推荐
新兴AI民工20 分钟前
windows上的visual studio2022的项目使用jenkins自动打包
windows·jenkins·visual studio
简诚21 分钟前
PPHGNetV2源代码解析
python·深度学习·机器学习
WarPigs22 分钟前
Visual Studio问题记录
ide·windows·visual studio
阿幸软件杂货间31 分钟前
PPT转图片拼贴工具 v3.0
python·opencv·计算机视觉·powerpoint
struggle20251 小时前
LLMControlsArm开源程序是DeepSeek 控制熊猫机械臂
人工智能·python·cmake·jupyternotebook·deepseek
Teln_小凯1 小时前
Python读取阿里法拍网的html+解决登录cookie
开发语言·python·html
点云SLAM1 小时前
PyTorch中matmul函数使用详解和示例代码
人工智能·pytorch·python·深度学习·计算机视觉·矩阵乘法·3d深度学习
love530love2 小时前
【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程
开发语言·人工智能·windows·笔记·python·rust·virtualenv
程序员杰哥2 小时前
Postman常见问题及解决方法
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
IGP92 小时前
20250606-C#知识:List排序
c#·list