2013-12-10 5 views
10

Qual è il modo divinatorio per la ricerca in lista data ['a', 'b', 'c'] per l'elemento b sostituirlo e inserire più elementi b1, b2, b3 modo che l'elenco finalmente legge come ['a', 'b1', 'b2', 'b3', 'c']ricerca di elementi in lista e sostituirlo con le voci multiple

+1

cosa dovrebbe succedere se 'B' è presente più di una volta? –

+0

nel mio caso particolare è garantito che gli articoli sono unici – greole

risposta

14

Utilizzando fetta notazione:

>>> lst = ['a', 'b', 'c'] 
>>> i = lst.index('b') # This raises ValueError if there's no 'b' in the list. 
>>> lst[i:i+1] = 'b1', 'b2', 'b3' 
>>> lst 
['a', 'b1', 'b2', 'b3', 'c'] 

NOTA Questo cambia solo il primo elemento corrispondente.

+0

@SteveP., Vedi [* Elenco liste * dal tutorial Python] (http://docs.python.org/3/tutorial/introduction.html#lists). – falsetru

+0

@SteveP., Poiché 'list .__ setitem__ con argomento oggetto slice' è implementato in questo modo. Vedi http://hg.python.org/cpython/file/a3bdbe220f8a/Objects/listobject.c#l579 – falsetru

+0

Grazie, questo è quello che stavo cercando. –

3

approccio alternativo: Utilizzo itertools.chain.from_iterable

>>> b = ["b1", "b2", "b3"] 
>>> a = ['a', 'b', 'c'] 
>>> a = [b if x=='b' else [x] for x in a] 
>>> a 
['a', ['b1', 'b2', 'b3'], 'c'] 
>>> import itertools 
>>> list(itertools.chain.from_iterable(a)) 
['a', 'b1', 'b2', 'b3', 'c'] 
>>> 
+3

Per supportare un caso generale, i singoli elementi devono essere resi iterabili: '... else [x] per x in a'. – georg

+1

Prova 'a = ['aaa', 'b', 'ccc']', e vedrai perché @ thg435 suggerisce '[x]'. (A proposito, gli oggetti stringa sono iterabili.) – falsetru

Problemi correlati