原地排序对空列表返回None
为什么 [].sort() != []
但却是 [].sort() = None
呢?
从逻辑上看,第一个情况似乎应该是对的。
3 个回答
2
Python的文档在至少两个地方提到了这个问题:
sort()
和reverse()
这两个方法会直接修改原来的列表,这样可以节省空间,特别是在处理很大的列表时。为了提醒你它们是通过副作用来工作的,所以它们不会返回排序或反转后的列表。
你也可以使用列表的
list.sort()
方法。这个方法会直接修改列表(并返回None,以避免混淆)。通常来说,它比sorted()
使用起来不太方便,但如果你不需要保留原来的列表,它会稍微高效一些。
4
这是因为列表是可变的。[].sort()
这个方法并不会返回一个新的列表,它只是直接修改了原来的列表,所以它的返回值是空的,或者说是 None
。这也是为什么当你想要排序的时候,不需要像 list = list.sort()
这样做,你只需要用 list.sort()
就可以了。
19
这是因为 sort
方法总是返回 None
,它是在原地排序,也就是说它会直接修改原来的列表。你可以使用 sorted
方法来代替。
>>> sorted([]) == []
True