2009-03-16 16 views
6

C'è un modo migliore di inserire ed estendere contemporaneamente un elenco? Ecco un brutto esempio di come lo sto attualmente facendo. (Diciamo che voglio inserire '2.4' e '2.6' dopo l'elemento '2'):Inserimento ed estensione simultanea di un elenco?

>>> 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

Stai cercando di mantenere l'elenco in ordine? Se è così, quella domanda è stata posta. –

+0

Commento pendent minore, ['1', '2', '2.4', '2.6', '2', '3', '4'] ha duplicato il '2' – Drew

risposta

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

io non sono del tutto chiare su quello che stai facendo; se si desidera aggiungere valori, e avere la lista rimane in ordine, è pulito (e probabilmente ancora più veloce) per ordinare solo il tutto:

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

si può facilmente inserire un singolo elemento utilizzando list.insert(i, x), che definisce Python come s[i:i] = [x].

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

Se si desidera inserire un elenco, è possibile rendere la propria funzione che omette il []:

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

Date un'occhiata al bisect module. Penso che faccia quello che vuoi.

Problemi correlati