2012-04-14 824 views
8

Tengo un list de unas 40 entradas. Y con frecuencia quiero agregar un elemento al comienzo de la lista (con id 0) y quiero delete la entrada last (con id 40) de la lista.Agregar entrada a la lista y eliminar la primera en Python

¿cómo hago esto lo mejor?

like: (ejemplo con 5 entradas)

[0] = "herp" 
    [1] = "derp" 
    [2] = "blah" 
    [3] = "what" 
    [4] = "da..." 

después de añadir "wuggah" y borrar la última debe ser como:

[0] = "wuggah" 
    [1] = "herp" 
    [2] = "derp" 
    [3] = "blah" 
    [4] = "what" 

o añadiendo uno y borrar primero.

Y no quiero terminar moviéndolos manualmente una tras otra todas las entradas a la siguiente identificación.

+0

Le sugiero que investigue un poco más antes de publicar ... La respuesta está literalmente en cada primera página de introducción a las listas. – Mellkor

+2

"Y no quiero terminar moviéndolos manualmente una tras otra todas las entradas a la siguiente identificación". Internamente, un objeto de lista asigna una lista más grande que el tamaño de la lista que se usa actualmente (10 elementos, pero la lista es en realidad mucho más grande que eso). Así que detrás de la escena está haciendo todo eso por usted: esto amortiza el tiempo de ejecución de la inserción, hace estallar en una posición particular y el otro opera lo más bajo posible. http://wiki.python.org/moin/TimeComplexity – CppLearner

Respuesta

7

Uso collections.deque:

>>> import collections 
>>> q = collections.deque(["herp", "derp", "blah", "what", "da.."]) 
>>> q.appendleft('wuggah') 
>>> q.pop() 
'da..' 
>>> q 
deque(['wuggah', 'herp', 'derp', 'blah', 'what']) 
+0

Gracias. ¿Es esto lo mismo que 'myList.insert (0," wuggah ")'? –

+2

@wagglewax Sí, excepto que esta es una operación O (1) en lugar de O (n). –

10

Uso insert() para colocar un elemento al principio de la lista:

myList.insert(0, "wuggah") 

Uso pop() para quitar y volver un elemento de la lista. Pop sin argumentos hace estallar el último elemento de la lista

myList.pop() #removes and returns "da..." 
4

Uso collections.deque

In [21]: from collections import deque 

In [22]: d = deque([], 3) 

In [24]: for c in '12345678': 
    ....:  d.appendleft(c) 
    ....:  print d 
    ....: 
deque(['1'], maxlen=3) 
deque(['2', '1'], maxlen=3) 
deque(['3', '2', '1'], maxlen=3) 
deque(['4', '3', '2'], maxlen=3) 
deque(['5', '4', '3'], maxlen=3) 
deque(['6', '5', '4'], maxlen=3) 
deque(['7', '6', '5'], maxlen=3) 
deque(['8', '7', '6'], maxlen=3) 
+1

El uso de la longitud máxima es una mejor solución aquí, más elegante, dicho esto, el OP quería anteponer el artículo, no agregarlo, quiere '' deque.appendleft() ''. Editado –

1

una sola línea, pero probablemente no es tan eficiente como algunos de los otros ... Aquí

myList=["wuggah"] + myList[:-1] 

también tenga en cuenta que se crea una nueva lista, que puede no ser lo que quiere ...

1

Otro enfoque

L = ["herp", "derp", "blah", "what", "da..."] 

L[:0]= ["wuggah"] 
L.pop()    
Cuestiones relacionadas