2012-04-02 55 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)

其他受访者是正确的,这种差异与排序稳定性有关,保留了相同密钥的顺序。 排序()返回一个列表,而颠倒()返回一个迭代器。