2012-04-02 8 views
19

biri diğerinin üzerine kullanılacak Nedenpiton tersine (listesi) arasındaki fark ve list.sort (reverse = True)

mylist = sorted(mylist, reverse=True) 

vs

mylist = reversed(sorted(mylist)) 

arasındaki fark nedir?

bu

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

aynı Nasıl hakkında böyle

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

olarak birden çok sütun üzerinde istikrarlı bir çeşit içindir?

cevap

17

tam olarak arasındaki farka çarpmışsınız. Timsort sabit olduğundan, tersine sıralamayı tersine çevirmek, ters sırayla sıralanmamış öğelerini bırakacaktır.

>>> 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

Teşekkürler, genel kullanım durumları için muhtemelen önemli değil. – Gladius

+1

Sağ. Her şeyi bir şekilde sıralarsanız, o zaman aynı sonucu verecektir. –

0

Sıralı() için bir liste alırsınız. ama tersine çevrilmiş() bir yineleyici döndürür

1

İlginç değişmez: list(reversed(sorted(reversed(data)))) == sorted(data, reverse=True).

Diğer katılımcılar, farkın, eşit anahtarların sırasını koruyan sıralama kararlılığı ile ilgili olması gerektiği konusunda doğrular. Ayrıca sıralanmış() bir listeyi döndürürken, geri() bir yineleyici döndürür.