2015-08-28 32 views
2

我試着數的順序從字符串進行排序:蟒蛇初學者:錯在以「打印mystr.split(」「)。種類(反向= TRUE)」

在Python解釋:

>>> mystr = '1,2,3,4,5' 
    >>> a = mystr.split(',') 
    >>> a 
    ['1', '2', '3', '4', '5'] 
    >>> a.sort(reverse=True) 
    >>> a 
    ['5', '4', '3', '2', '1'] 

但是,當我想使代碼更短,問題occures:

>>> mystr 
    '1,2,3,4,5' 
    >>> print mystr.split(',').sort(reverse=True) 
    None 

爲什麼發生的呢希望對你有幫助嗎?!

回答

6

sort()不返回一個新的列表,而是在排序該功能被稱爲

更準確的名單,sort()不對列表

>>> a = mystr.split(',') 
>>> a.sort(reverse=True) # Nothing is returned at this line 
>>> a # But the list is sorted 
['5', '4', '3', '2', '1'] 

的就地分揀

如果要返回排序列表,請使用sorted()函數代替

>>> sorted(mystr.split(','), reverse=True) 
['5', '4', '3', '2', '1'] 

側面說明:sort VS sorted可能導致詳細討論的就地排序算法的效率。由於sort函數不會創建新列表,因此它的內存效率將高於sorted。另外sort將能夠處理更大的列表。

+0

不妨指出'.sort()'比'sorted()'更有效率,儘管不需要爲小列表和/或不頻繁排序而擔心。 – Cyphase

0

爲鏈,你想,你可以一起做喜歡:

mystr = '1,2,3,4,5' 
print list(reversed(mystr.split(','))) 
0

這將做你想做的一條鏈:

sorted('1,2,3,4,5'.split(','))[::-1] # ['5', '4', '3', '2', '1'] 
0

正如其他人所說,排序()VS排序(),以VS到位修改返回一個列表,這裏是讀了它的鏈接:

https://wiki.python.org/moin/HowTo/Sorting

print sorted(mystr.split(','), reverse=True)