我想要制作一个排序列表。我跑:
sorted_list=list(my_set).sort()
但即使none
和list(my_set)
都非空,也会返回my_set
。另一方面,这个:
sorted_list=list(my_set)
sorted_list.sort()
工作正常。
为什么会这样? python不允许在构造函数直接返回的对象上调用方法吗?
答案 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
。