为什么 list.sort() 方法不返回已排序的列表?

Python 中有两种途径用于对 list 排序:sorted() 和 list.sort()。

>>> alist = [3, 6, 2, 9, 5]
>>>
>>> s1 = sorted(alist)
>>> s1
[2, 3, 5, 6, 9]
>>> alist
[3, 6, 2, 9, 5]
>>>
>>> s2 = alist.sort()
>>> s2
>>> type(s2)
<class 'NoneType'>
>>> alist
[2, 3, 5, 6, 9]

我们看到:

  • sorted() 返回的 s1 是一个已排序的 list 对象,而 list.sort() 返回的是 None。
  • sorted() 不改变原 list,而 list.sort() 则直接在原 list 上做了排序。

二者在使用上还是有显著区别的。

那么,为什么 list.sort() 不返回一个新的已排序的 list 对象呢?

Python FAQ 中回答说:

In situations where performance matters, making a copy of the list just to sort it would be wasteful.

这是出于性能考量。

某些情况下为了排序而生成一个 list 对象的拷贝可能就是浪费。

这倒也是啊,拷贝需要额外的内存和 CPU 时间。

如果你要排序一个 list 对象,而它的顺序不影响后续使用,那就使用 list.sort() 吧。


欢迎转载,请注明出处。谢绝搬运,抄袭必究!

欢迎关注本站公众号【python学与思】

python 学与思