2010-07-03 6 views
53

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

+0

double possible de [ Syntaxe simple pour mettre un élément de liste au premier plan en python?] (Https://stackoverflow.com/questions/1014523/simple-syntax-for-bringing-a-list-element-to-the-front-in-python –

Répondre

96

Utilisez la méthode insert d'une liste:

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

Vous pouvez également utiliser une notation de découpage:

l[index:index] = [item] 

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

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

Gardez juste à l'esprit que le déplacement d'un élément déjà dans une liste avec la méthode insert/pop aura un comportement différent selon que vous vous déplacez vers l'avant ou vers l'arrière o f la liste. Déplacer vers la gauche, vous insérez avant l'objet que vous avez choisi. Déplacer vers l'arrière vous insérez après l'élément que vous avez choisi. Vérifiez pour passer à la fin de la liste (erreur d'index). – MKaras

+0

Comment déplacer plusieurs éléments? Étant donné une liste a = [1,2,3,4,5,6,7,8,9], comment le transformer en [1,2, [3,4,5], 6,7,8,9 ]? Cela peut-il être fait en une étape ou avec une compréhension de liste? – g33kz0r

+0

@MKaras J'ai testé cela avec Python 3.5 et vous pouvez insérer dans 'last index + 1' sans erreurs. L'élément est simplement ajouté à la liste dans ce cas. – user2061057

17

Une solution légèrement plus courte, qui ne se déplace que l'élément à la fin, n'est nulle part ceci:

l += [l.pop(0)] 

Par exemple:

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

Vous pouvez aussi utiliser 'l.append (l.pop (0))'. Ce n'est que légèrement plus long, mais c'est beaucoup plus lisible. – CoreDumpError

+0

@CoreDumpError Oui, ça fait la même chose. J'ai appris la syntaxe '+ =' significativement avant le '.append()', d'où mon parti pris de l'utiliser. – Tim

7

Si vous ne connaissez pas la position de l'élément, vous peut besoin de trouver d'abord l'index:

old_index = list1.index(item) 

puis déplacez-le:

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

ou à mon humble avis une manière plus propre:

try: 
    list1.remove(item) 
    list1.insert(new_index, item) 
except ValueError: 
    pass 
1

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

list1[index1],list1[index2]=list1[index2],list1[index1] 
+1

Ceci est un échange, pas un mouvement. – juzzlin

Questions connexes