125 votes

Déplacer un élément dans une liste ?

En Python, comment déplacer un élément vers un index défini dans une liste ?

187voto

David Z Points 49476

Utilisez le insert d'une liste :

l = list(...)
l.insert(index, item)

Vous pouvez également utiliser une notation en tranches :

l[index:index] = [item]

Si vous voulez déplacer un élément qui se trouve déjà dans la liste à la position spécifiée, vous devez le supprimer et l'insérer à la nouvelle position :

l.insert(newindex, l.pop(oldindex))

42voto

Tim Points 1404

Une solution un peu plus courte, qui ne déplace l'élément qu'à la fin, mais pas n'importe où, est la suivante :

l += [l.pop(0)]

Par exemple :

>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]

33voto

nngeek Points 463

Si vous ne connaissez pas la position de l'élément, vous devrez peut-être d'abord trouver l'index :

old_index = list1.index(item)

puis le déplacer :

list1.insert(new_index, list1.pop(old_index))

ou IMHO une manière plus propre :

list1.remove(item)
list1.insert(new_index, item)

4voto

V.Petretto Points 102

Une solution très simple, mais vous devez connaître l'indice de la position d'origine et l'indice de la nouvelle position :

list1[index1],list1[index2]=list1[index2],list1[index1]

1voto

Riedler Points 154

J'ai profilé quelques méthodes pour déplacer un élément dans une même liste avec timeit. Voici celles à utiliser si j>i :

 14.4usec  x\[i:i\]=x.pop(j),     
 14.5usec  x\[i:i\]=\[x.pop(j)\]    
 15.2usec  x.insert(i,x.pop(j)) 

et ici ceux à utiliser si j<=i :

 14.4usec  x\[i:i\]=x\[j\],;del x\[j\]     
 14.4usec  x\[i:i\]=\[x\[j\]\];del x\[j\]    
 15.4usec  x.insert(i,x\[j\]);del x\[j\] 

La différence n'est pas énorme si vous ne l'utilisez que quelques fois, mais si vous faites des travaux lourds comme le tri manuel, il est important de prendre le plus rapide. Sinon, je vous recommande de prendre celle qui vous semble la plus lisible.

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