9 votes

Déplacement des valeurs mais préservation de l'ordre dans une liste Python

J'ai une liste

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

et je veux "déplacer" ses valeurs pour qu'il se transforme en

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

et l'étape suivante

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

Existe-t-il une fonction intégrée dans Python pour faire cela ?

Ou y a-t-il un moyen plus court ou plus agréable que de

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

25voto

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

Cette opération est cependant coûteuse, car elle doit déplacer le contenu de la liste entière, ce qui est O(n). Un meilleur choix peut être d'utiliser collections.deque si elle est disponible dans votre version de Python, qui permettent d'insérer et de retirer des objets à chaque extrémité en un temps approximatif de O(1) :

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

Notez également que ces deux solutions impliquent de modifier l'objet séquence original, alors que la vôtre crée une nouvelle liste et l'assigne à a . Donc si on le faisait :

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

Avec votre méthode, c continuerait à faire référence à la liste originale, non tournée, et avec mes méthodes, il fera référence à la liste mise à jour, tourné liste/deque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X