2013-08-01 59 views
1

我有一套我想成爲一個排序列表。我運行:爲什麼我在創建後無法對列表進行排序?

sorted_list=list(my_set).sort() 

但這返回none,即使當list(my_set)my_set都是空的。另一方面:

sorted_list=list(my_set) 
sorted_list.sort() 

工作得很好。

這是怎麼發生的? python不允許在構造函數直接返回的對象上調用方法嗎?

+1

與'a = my_list.append(b)'不同的原因是人們認爲它不行。 – roippi

+1

您可以在創建後立即對列表進行排序。你的代碼已經完成了。只是'sorted_list'是'sort'返回的值的引用,它是'None',所以你最終不會完全參照實際的排序列表。但是它仍然存在(或者在GC沒有提及它之前清理它)。 – abarnert

回答

4

.sort()排序清單並返回None。您需要在這裏使用sorted()函數。

>>> a = [3, 2, 1] 
>>> print a.sort() 
None 
>>> a 
[1, 2, 3] 
>>> sorted(a) 
[1, 2, 3] 
3

很簡單:

  • sort()使分揀到位,並返回None
  • sorted()返回一個排序的副本

下面是從How To/Sorting - Python Wiki報價:

Python列表有一個內置的sort()方法,用於修改列表 in-place和sorted()內置函數,該函數根據可迭代構建新的排序列表 列表。

1

由於sort方法更改列表就地。你想什麼做的是sorted函數返回一個排序列表:

sorted_list = sorted(my_set) 

sorted()功能不接觸它的參數,因爲它使得它的一個副本。另一方面,sort方法直接更改原始列表並返回None

2

您正在尋找這樣的:

sorted_list = sorted(list(my_set)) 

或者更簡單:

sorted_list = sorted(my_set) 

sort()各種替代列表並返回None,這就是將存儲在sorted_list。這不是我們所期望的。

在另一方面,sorted()返回它作爲一個參數接收元素的新排序列表(也可以是一個列表或一組:其實,任何可迭代),而這正是被分配到sorted_list - 正是我們要!

相關問題