我为什么不能在制作完成后立即对列表进行排序?

时间:2013-08-01 19:35:35

标签: python list python-3.x

我想要制作一个排序列表。我跑:

sorted_list=list(my_set).sort()

但即使nonelist(my_set)都非空,也会返回my_set。另一方面,这个:

sorted_list=list(my_set)
sorted_list.sort()

工作正常。

为什么会这样? python不允许在构造函数直接返回的对象上调用方法吗?

4 个答案:

答案 0 :(得分:4)

.sort()对列表进行排序并返回None。您需要在此处使用sorted()功能。

>>> a = [3, 2, 1]
>>> print a.sort()
None
>>> a
[1, 2, 3]
>>> sorted(a)
[1, 2, 3]

答案 1 :(得分:3)

很简单:

  • sort()进行排序并返回None
  • sorted()返回已排序的副本

以下是How To/Sorting - Python Wiki的引用:

  

Python列表有一个修改列表的内置sort()方法   就地和一个排序()内置函数,构建一个新的排序   从可迭代列表。

答案 2 :(得分:2)

您正在寻找:

sorted_list = sorted(list(my_set))

甚至更简单:

sorted_list = sorted(my_set)

sort()对列表进行排序并返回None,这将存储在sorted_list中。这不是我们的预期。

另一方面,sorted()返回一个新的排序列表,其中包含作为参数接收的元素(它可以是列表或集合:实际上,任何可迭代的),这是分配给{的内容{1}} - 正是我们想要的!

答案 3 :(得分:1)

因为sort方法会更改列表就地。你想要的是sorted函数,它返回一个排序列表:

sorted_list = sorted(my_set)

sorted()函数不会触及它的参数,因为它会复制它。另一方面,sort方法直接更改原始列表并返回None