2010-07-03 39 views
53

En Python, ¿cómo muevo un elemento a un índice definido en una lista?¿Mover un elemento dentro de una lista?

+0

duplicado posible de [ ¿Sintaxis simple para traer un elemento de lista al frente en python?] (Https://stackoverflow.com/questions/1014523/simple-syntax-for-bringing-a-list-element-to-the-front-in-python) –

Respuesta

96

utilizar el método de insert de una lista:

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

Alternativamente, se puede utilizar una notación de rebanada:

l[index:index] = [item] 

Si desea mover un elemento que ya está en la lista a la especificada posición, tendría que eliminarlo e insertarlo en la nueva posición:

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

Solo tenga en cuenta que mover un elemento que ya está en una lista con el método insert/pop tendrá un comportamiento diferente dependiendo de si se mueve hacia adelante o hacia atrás o f la lista. Moviéndose hacia la izquierda, inserta antes el objeto que ha elegido. Pasando a la parte posterior, inserte después del artículo que ha elegido. Verifique el movimiento al final de la lista (error de índice). – MKaras

+0

¿Cómo mover elementos múltiples? Dada una lista a = [1,2,3,4,5,6,7,8,9], cómo transformarla en [1,2, [3,4,5], 6,7,8,9 ]? ¿Se puede hacer esto en un solo paso o con una lista de comprensión? – g33kz0r

+0

@MKaras Probé esto con Python 3.5 y PUEDE insertarlo en "último índice + 1" sin errores. El elemento solo se agrega a la lista en ese caso. – user2061057

17

Una solución un poco más corto, que sólo mueve el elemento al final, no en cualquier lugar es la siguiente:

l += [l.pop(0)] 

Por ejemplo:

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

También podría usar 'l.append (l.pop (0))'. Solo es un poco más largo, pero es mucho más legible. – CoreDumpError

+0

@CoreDumpError Sí, eso hace lo mismo. Aprendí la sintaxis '+ =' significativamente antes del '.append()', de ahí mi sesgo para usarlo. – Tim

7

Si no saben la posición del elemento, puede ser necesario para encontrar el índice de la primera:

old_index = list1.index(item) 

luego moverlo:

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

o en mi humilde opinión una forma más limpia:

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

Una solución muy simple, pero usted tiene que saber el índice de la posición original y el índice de la nueva posición:

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

Esto es un intercambio, no un movimiento. – juzzlin

Cuestiones relacionadas