2009-07-31 15 views

Odpowiedz

25
>>> a = [1,2,3,4,5] 
>>> a.append(a.pop(0)) 
>>> a 
[2, 3, 4, 5, 1] 

to jest kosztowne, ale, jak to musi przenieść zawartość całej listy, co O (N). Lepszym wyborem może być użycie collections.deque jeśli jest on dostępny w wersji Pythona, które umożliwiają obiekty mają być wkładane i wyjmowane z obu końcach w przybliżeniu O (1) czas:

>>> a = collections.deque([1,2,3,4,5]) 
>>> a 
deque([1, 2, 3, 4, 5]) 
>>> a.rotate(-1) 
>>> a 
deque([2, 3, 4, 5, 1]) 

Zauważ też, że oba te rozwiązania wymaga zmiany oryginalnego obiektu sekwencji, podczas gdy twoja tworzy nową listę i przypisuje ją do a. Więc jeśli zrobiliśmy:

>>> c = a 
>>> # rotate a 

Dzięki swojej metodzie c będzie nadal odnosić się do oryginału, obrócony listy, a także z moich metod, to odnoszą się do aktualizacji, obracany listy/deque.

Powiązane problemy