我有一组我想放入一个排序列表。我跑:
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()进行就地排序并返回Nonesorted()返回排序后的副本这是来自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。