原地排序对空列表返回None

4 投票
3 回答
9123 浏览
提问于 2025-04-16 23:44

为什么 [].sort() != [] 但却是 [].sort() = None 呢?

从逻辑上看,第一个情况似乎应该是对的。

3 个回答

2

Python的文档在至少两个地方提到了这个问题:

sort()reverse()这两个方法会直接修改原来的列表,这样可以节省空间,特别是在处理很大的列表时。为了提醒你它们是通过副作用来工作的,所以它们不会返回排序或反转后的列表。

- 可变序列类型下的注释7

你也可以使用列表的list.sort()方法。这个方法会直接修改列表(并返回None,以避免混淆)。通常来说,它比sorted()使用起来不太方便,但如果你不需要保留原来的列表,它会稍微高效一些。

- 排序基础知识在排序的HOWTO中

4

这是因为列表是可变的。[].sort() 这个方法并不会返回一个新的列表,它只是直接修改了原来的列表,所以它的返回值是空的,或者说是 None。这也是为什么当你想要排序的时候,不需要像 list = list.sort() 这样做,你只需要用 list.sort() 就可以了。

19

这是因为 sort 方法总是返回 None,它是在原地排序,也就是说它会直接修改原来的列表。你可以使用 sorted 方法来代替。

>>> sorted([]) == []
True

撰写回答