我有一套我想成爲一個排序列表。我運行:爲什麼我在創建後無法對列表進行排序?
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()方法,用於修改列表 in-place和sorted()內置函數,該函數根據可迭代構建新的排序列表 列表。
由於sort
方法更改列表就地。你想什麼做的是sorted
函數返回一個排序列表:
sorted_list = sorted(my_set)
的sorted()
功能不接觸它的參數,因爲它使得它的一個副本。另一方面,sort
方法直接更改原始列表並返回None
。
您正在尋找這樣的:
sorted_list = sorted(list(my_set))
或者更簡單:
sorted_list = sorted(my_set)
sort()
各種替代列表並返回None
,這就是將存儲在sorted_list
。這不是我們所期望的。
在另一方面,sorted()
返回它作爲一個參數接收元素的新排序列表(也可以是一個列表或一組:其實,任何可迭代),而這正是被分配到sorted_list
- 正是我們要!
與'a = my_list.append(b)'不同的原因是人們認爲它不行。 – roippi
您可以在創建後立即對列表進行排序。你的代碼已經完成了。只是'sorted_list'是'sort'返回的值的引用,它是'None',所以你最終不會完全參照實際的排序列表。但是它仍然存在(或者在GC沒有提及它之前清理它)。 – abarnert