1

我有一组我想放入一个排序列表。我跑:

sorted_list=list(my_set).sort()

但这会返回none,即使两者list(my_set)my_set都是非空的。另一方面是:

sorted_list=list(my_set)
sorted_list.sort()

工作得很好。

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

4

4 回答 4

4

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

>>> a = [3, 2, 1]
>>> print a.sort()
None
>>> a
[1, 2, 3]
>>> sorted(a)
[1, 2, 3]
于 2013-08-01T19:36:15.173 回答
3

这很简单:

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

这是来自How To/Sorting - Python Wiki的引述:

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

于 2013-08-01T19:36:24.270 回答
2

你正在寻找这个:

sorted_list = sorted(list(my_set))

或者更简单:

sorted_list = sorted(my_set)

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

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

于 2013-08-01T19:37:32.150 回答
1

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

sorted_list = sorted(my_set)

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

于 2013-08-01T19:36:39.097 回答