2013-12-10 66 views
10

什麼是Python的方式通過給定列表['a', 'b', 'c']搜索元素b替換和插入多個項目b1, b2, b3以便列表最後讀爲['a', 'b1', 'b2', 'b3', 'c']搜索列表元素,並通過多個項目替換它

+1

應該發生什麼,如果'B'存在一次以上? –

+0

在我的具體情況下,它保證這些項目是唯一的 – greole

回答

14

使用切片表示法:

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

注意這僅改變第一個匹配項。

+0

@SteveP。,參見[*列表*部分從Python教程](http://docs.python.org/3/tutorial/introduction.html#lists)。 – falsetru

+0

@SteveP。,因爲帶有切片對象參數的list.__ setitem__是這樣實現的。見http://hg.python.org/cpython/file/a3bdbe220f8a/Objects/listobject.c#l579 – falsetru

+0

謝謝,這就是我一直在尋找。 –

3

另一種方法:使用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

爲了支持一般情況,單個元素必須是可迭代的:'... else [x]用於a中的x。 – georg

+1

嘗試'a = ['aaa','b','ccc']',你會明白爲什麼@ thg435建議'[x]'。 (順便說一句,字符串對象是可迭代的。) – falsetru