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