2009-03-16 8 views
6

Existe-t-il un meilleur moyen d'insérer et d'étendre simultanément une liste? Voici un exemple laide de la façon dont je le fais actuellement. (Permet de dire que je veux insérer « 2.4 » et « 2.6 » après l'élément « 2 »):Insertion et extension simultanées d'une liste?

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

Essayez-vous de maintenir la liste dans l'ordre trié? Si oui, cette question a été posée. –

+0

Commentaire pendentif mineur, ['1', '2', '2.4', '2.6', '2', '3', '4'] a un doublé le '2' – Drew

Répondre

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

Je ne suis pas tout à fait clair sur ce que vous faites; si vous voulez ajouter des valeurs, et ont la liste demeurent en ordre, il est plus propre (et probablement encore plus rapide) pour trier juste la chose:

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

Vous pouvez facilement insérer un seul élément à l'aide list.insert(i, x), qui définit Python comme 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 vous souhaitez insérer une liste, vous pouvez faire votre propre fonction qui omet le []:

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

Jetez un oeil à la bisect module. Je pense que ça fait ce que tu veux.