2009-03-16 13 views
6

¿Existe una mejor manera de insertar y extender simultáneamente una lista? Aquí hay un feo ejemplo de cómo lo estoy haciendo actualmente. (Digamos quiero insertar '2.4' y '2.6' después de que el elemento '2'):¿Insertar y extender una lista simultáneamente?

>>> a = ['1', '2', '3', '4'] 
>>> b = a[:a.index('2')+1] + ['2.4', '2.6'] + a[a.index('2'):] 
>>> b 
<<< ['1', '2', '2.4', '2.6', '3', '4'] 
+0

¿Está tratando de mantener la lista ordenada? Si es así, esa pregunta ha sido hecha. –

+0

Comentario pendiente menor, ['1', '2', '2.4', '2.6', '2', '3', '4'] ha duplicado el '2' – Drew

Respuesta

15
>>> a = ['1', '2', '3', '4'] 
>>> a 
['1', '2', '3', '4'] 
>>> i = a.index('2') + 1 # after the item '2' 
>>> a[i:i] = ['2.4', '2.6'] 
>>> a 
['1', '2', '2.4', '2.6', '3', '4'] 
>>> 
2

No estoy del todo claro sobre lo que está haciendo; Si desea agregar valores, y tienen la lista permanece en orden, está más limpia (y probablemente aún más rápido) a sólo una especie todo el asunto:

a.extend(['2.4', '2.6']) 
a.sort() 
5

usted puede insertar fácilmente un solo elemento utilizando list.insert(i, x), que define Python como s[i:i] = [x].

a = ['1', '2', '3', '4'] 
for elem in reversed(['2.4', '2.6']): 
    a.insert(a.index('2')+1, elem)) 

Si desea insertar una lista, puede hacer su propia función que omite la []:

def iextend(lst, i, x): 
    lst[i:i] = x 

a = ['1', '2', '3', '4'] 
iextend(a, a.index('2')+1, ['2.4', '2.6'] 
# a = ['1', '2', '2.4', '2.6', '3', '4'] 
2

Tener un vistazo a la bisect module. Creo que hace lo que quieres.

Cuestiones relacionadas