2013-05-09 15 views
5

Próbowałem sprawdzić, jak listy w python działa zgodnie z samouczkiem, który czytałem. Kiedy próbowałem użyć list.sort() lub list.reverse(), tłumacz daje mi None.Funkcje sort() i reverse() nie działają

Proszę dać mi znać, jak mogę uzyskać wynik z tych dwóch metod:

a = [66.25, 333, 333, 1, 1234.5] 
print(a.sort()) 
print(a.reverse()) 

Odpowiedz

32

.sort() i .reverse() zmienić listę w miejscu i powrócić None Zobacz mutable sequence documentation:

sort() i reverse() metody modyfikują listę w celu oszczędzania miejsca podczas sortowania lub odwracania dużej listy. Aby przypomnieć, że działają one z efektem ubocznym, nie zwracają uporządkowanej lub odwróconej listy.

Czy to zamiast:

a.sort() 
print(a) 
a.reverse() 
print(a) 

lub korzystać z funkcji sorted() i reversed().

print(sorted(a))    # just sorted 
print(list(reversed(a)))  # just reversed 
print(a[::-1])     # reversing by using a negative slice step 
print(sorted(a, reverse=True)) # sorted *and* reversed 

Te metody zwracają nową listę i pozostawić pierwotną listę wejściowego nietknięte.

Demo, w miejscu sortowania i cofania:

>>> a = [66.25, 333, 333, 1, 1234.5] 
>>> a.sort() 
>>> print(a) 
[1, 66.25, 333, 333, 1234.5] 
>>> a.reverse() 
>>> print(a) 
[1234.5, 333, 333, 66.25, 1] 

i tworzenie nowych sortowane i odwrócone listy:

>>> a = [66.25, 333, 333, 1, 1234.5] 
>>> print(sorted(a)) 
[1, 66.25, 333, 333, 1234.5] 
>>> print(list(reversed(a))) 
[1234.5, 1, 333, 333, 66.25] 
>>> print(a[::-1]) 
[1234.5, 1, 333, 333, 66.25] 
>>> print(sorted(a, reverse=True)) 
[1234.5, 333, 333, 66.25, 1] 
>>> a # input list is untouched 
[66.25, 333, 333, 1, 1234.5] 
+2

Powinniśmy zrobić to kanoniczną odpowiedzią na wszystkie duplikaty tego pytania. – jamylak

1

Dla porównania, można zapoznać się z dokumentacją here specjalnie mówi:

Metody sortowania() i odwracania() modyfikują listę w celu oszczędzania miejsca podczas sortowania lub odtwarzania zaśpiewaj dużą listę. Aby przypomnieć, że działają one z efektem ubocznym, nie zwracają uporządkowanej lub odwróconej listy.

Nie bój się przeczytać instrukcji!

0

Ta metoda działa w miejscu.

Ten kod działa (Python 3.x)

a = [66.25, 333, 333, 1, 1234.5] 
a.sort() 
print(a) 
a.reverse() 
print(a) 

>>> 
[1, 66.25, 333, 333, 1234.5] 
[1234.5, 333, 333, 66.25, 1] 
1

Prosty rosnąco sortowania jest bardzo łatwo wywołać funkcję sortowane(). Zwraca nową posortowaną listę:

>>> sorted([66.25, 333, 333, 1, 1234.5]) 
[1, 66.25, 333, 333, 1234.5] 

posortowane() zaakceptuj odwrotny parametr z wartością boolowską.

>>> sorted([66.25, 333, 333, 1, 1234.5], reverse=True) 
[1234.5, 333, 333, 66.25, 1] 
+0

Potrzebowałem odpowiedzi Pythona 2.x, więc to działało dla mnie :) – randombee

Powiązane problemy