我有一组我想放入一个排序列表。我跑:
sorted_list=list(my_set).sort()
但这会返回none
,即使两者list(my_set)
和my_set
都是非空的。另一方面是:
sorted_list=list(my_set)
sorted_list.sort()
工作得很好。
为什么会这样?python是否不允许在构造函数直接返回的对象上调用方法?
我有一组我想放入一个排序列表。我跑:
sorted_list=list(my_set).sort()
但这会返回none
,即使两者list(my_set)
和my_set
都是非空的。另一方面是:
sorted_list=list(my_set)
sorted_list.sort()
工作得很好。
为什么会这样?python是否不允许在构造函数直接返回的对象上调用方法?
.sort()
对列表进行就地排序并返回None
. 您需要在sorted()
此处使用该功能。
>>> a = [3, 2, 1]
>>> print a.sort()
None
>>> a
[1, 2, 3]
>>> sorted(a)
[1, 2, 3]
这很简单:
sort()
进行就地排序并返回None
sorted()
返回排序后的副本这是来自How To/Sorting - Python Wiki的引述:
Python 列表有一个内置的 sort() 方法可以就地修改列表,还有一个 sorted() 内置函数可以从一个可迭代的对象中构建一个新的排序列表。
你正在寻找这个:
sorted_list = sorted(list(my_set))
或者更简单:
sorted_list = sorted(my_set)
sort()
对列表进行就地排序并返回None
,这就是将存储在sorted_list
. 这不是我们所期望的。
另一方面,sorted()
返回一个新的排序列表,其中包含它作为参数接收的元素(它可以是列表或集合:实际上,任何可迭代的),这就是分配给它的sorted_list
- 正是我们想要的!
因为该方法就地sort
更改了列表。你想要的是这个函数,它返回一个排序列表:sorted
sorted_list = sorted(my_set)
该sorted()
函数不会触及它的参数,因为它会复制它。另一方面,该sort
方法直接更改原始列表并返回None
。