Mover valores pero preservar el orden en una lista de Python

Tengo una lista

a=[1,2,3,4,5] 

y quiere ‘mover’ sus valores para que cambie a

 a=[2,3,4,5,1] 

y el siguiente paso

 a=[3,4,5,1,2] 

¿Hay una función incorporada en Python para hacer eso?

¿O hay una manera más corta o mejor que

 b=[a[-1]]; b.extend(a[:-1]); a=b 

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

Sin embargo, esto es costoso, ya que tiene que cambiar el contenido de toda la lista, que es O (n). Una mejor opción puede ser utilizar collections.deque si está disponible en su versión de Python, que permite insertar y eliminar objetos de cualquiera de los extremos en aproximadamente O (1) tiempo:

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

Tenga en cuenta también que ambas soluciones implican cambiar el objeto de secuencia original, mientras que la suya crea una nueva lista y la asigna a a . Así que si lo hiciéramos:

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

Con su método, c continuará refiriéndose a la lista original, sin rotar, y con mis métodos, se referirá a la lista / deque actualizada y rotada .