2012-04-02 51 views
19

是什麼VS蟒蛇差異與list.sort(反向= TRUE)

mylist = sorted(mylist, reverse=True) 

爲什麼會一個比其他使用

mylist = reversed(sorted(mylist)) 

之間的區別?

如何對多列如

mylist.sort(key=itemgetter(1)) 
mylist.sort(key=itemgetter(0)) 
mylist.reverse() 

一個穩定的排序是這樣的一樣

mylist.sort(key=itemgetter(1), reverse=True) 
mylist.sort(key=itemgetter(0), reverse=True) 

回答

17

你已經擊中了正好是的區別。由於Timsort是穩定的,因此排序反轉與反轉排序會使未排序的元素按相反順序排列。

>>> s = ((2, 3, 4), (1, 2, 3), (1, 2, 2)) 
>>> sorted(s, key=operator.itemgetter(0, 1), reverse=True) 
[(2, 3, 4), (1, 2, 3), (1, 2, 2)] 
>>> list(reversed(sorted(s, key=operator.itemgetter(0, 1)))) 
[(2, 3, 4), (1, 2, 2), (1, 2, 3)] 
+0

謝謝,對於一般用例,它可能並不重要。 – Gladius 2012-04-02 01:03:31

+1

對。如果你正在整理整個事情,那麼他們會給出相同的結果。 – 2012-04-02 01:04:18

0

您得到了排序()的列表。但reverse()返回一個迭代器

1

有趣的不變是:list(reversed(sorted(reversed(data)))) == sorted(data, reverse=True)

其他受訪者是正確的,這種差異與排序穩定性有關,保留了相同密鑰的順序。 排序()返回一個列表,而顛倒()返回一個迭代器。