2010-07-03 17 views
53

In Python, come posso spostare un elemento in un indice definito in un elenco?Spostare un elemento in un elenco?

+0

Eventuali duplicati di [ Sintassi semplice per portare un elemento della lista in primo piano in python?] (Https://stackoverflow.com/questions/1014523/simple-syntax-for-bringing-a-list-element-to-the-front-in-python –

risposta

96

utilizzare il metodo insert di una lista:

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

In alternativa, è possibile utilizzare una notazione fetta:

l[index:index] = [item] 

Se si desidera spostare un elemento che è già nella lista per il specificato posizione, dovresti eliminarlo e inserirlo nella nuova posizione:

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

Ricorda che lo spostamento di un elemento già in un elenco con il metodo insert/pop avrà un comportamento diverso a seconda che tu stia procedendo in avanti o indietro o f la lista. Spostandoti a sinistra inserisci prima l'oggetto che hai scelto. Spostandoti sul retro inserisci dopo l'oggetto che hai scelto. Controlla di passare alla fine della lista (errore indice). – MKaras

+0

Come spostare più elementi? Dato un elenco a = [1,2,3,4,5,6,7,8,9], come trasformarlo in [1,2, [3,4,5], 6,7,8,9 ]? Questo può essere fatto in un solo passo o con una lista di comprensione? – g33kz0r

+0

@MKaras Ho provato questo con Python 3.5 e tu puoi inserire 'ultimo indice + 1' senza errori. In tal caso, l'elemento viene semplicemente aggiunto all'elenco. – user2061057

17

Una soluzione leggermente più corta, che si muove solo la voce alla fine, non ovunque è questo:

l += [l.pop(0)] 

Ad esempio:

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

Si potrebbe anche usare 'l.append (l.pop (0))'. È solo marginalmente più lungo, ma è molto più leggibile. – CoreDumpError

+0

@CoreDumpError Sì, fa lo stesso. Ho imparato la sintassi '+ =' in modo significativo prima di '.append()', da qui il mio pregiudizio a usarlo. – Tim

7

Se non si conosce la posizione dell'elemento, è potrebbe essere necessario trovare l'indice prima:

old_index = list1.index(item) 

quindi spostarlo:

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

o IMHO un modo più pulito:

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

Una soluzione molto semplice, ma è necessario conoscere l'indice della posizione originale e l'indice della nuova posizione:

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

Questo è uno scambio, non una mossa. – juzzlin

Problemi correlati