就地排序返回空列表无

时间:2011-08-16 22:40:40

标签: python

为什么是[].sort() != []而是[].sort() = None

从逻辑上讲,似乎第一种情况应该是真的。

3 个答案:

答案 0 :(得分:15)

这是因为sort总是返回None,这是一个就地排序。请改用sorted

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

答案 1 :(得分:3)

这是因为列表是可变的。 [].sort()不会返回新列表,只会更改现有列表,因此返回值为空,或None。这就是你去排序时的原因,你不必像list = list.sort()这样做,你只需做list.sort()

答案 2 :(得分:2)

Python文档至少在两个不同的地方涵盖了这一点:

  

sort()reverse()方法会根据经济情况修改列表   排序或反转大型列表时的空间。提醒你   它们通过副作用进行操作,它们不会返回已排序或反转的   列表。

- note 7 under Mutable Sequence Types

  

您还可以使用列表的list.sort()方法。它修改了   就地列出(并返回None以避免混淆)。通常它更少   方便于sorted() - 但如果您不需要原始列表,   它效率稍高。

- Sorting Basics under the HOWTO on sorting