2013-02-06 138 views
3

在python中,用另一个列表中的元素替换列表中的元素的最佳方法是什么?用python中的列表替换元素

例如,我有:

a = [ 1, 'replace_this', 4 ] 

我想[2, 3]更换replace_this。更换之后,它必须是:

a = [ 1, 2, 3, 4 ] 

更新

当然,也可以做切片(我很抱歉,我没有在这个问题写),但问题是否有可能在列表中有多个replace_this值。在这种情况下,您需要在循环中进行替换,这会变得不理想。

我认为使用itertools.chain会更好,但我不确定。

+0

你试过什么? –

+0

我已经更新了一个使用替换字典和'chain'的例子。 –

回答

11

你可以用切片:

>>> a = [ 1, 'replace_this', 4 ] 
>>> a[1:2] = [2, 3] 
>>> a 
[1, 2, 3, 4] 

正如@mgilson指出 - 如果你不知道发生了元件的位置来代替,那么你可以使用a.index找到它.. (见他的评论)

更新有关不使用切片

使用itertools.chain,确保replacements有iterables:

from itertools import chain 

replacements = { 
    'replace_this': [2, 3], 
    4: [7, 8, 9] 
} 

a = [ 1, 'replace_this', 4 ] 
print list(chain.from_iterable(replacements.get(el, [el]) for el in a)) 
# [1, 2, 3, 7, 8, 9] 
+6

+1 - 你可以通过'i = a.index('replace_this')获得'1:2'; a [i:i + 1] = [2,3]' – mgilson

+0

这个解决方案真的很漂亮!非常感谢你 –

1

我会用发电机去替换元件,而另一个发电机去flatten吧。假设你有一个工作flatten发电机,使得在提供的链接:

def replace(iterable, replacements): 
    for element in iterable: 
     try: 
      yield replacements[element] 
     except KeyError: 
      yield element 

replac_dict = { 
    'replace_this': [2, 3], 
    1: [-10, -9, -8] 
} 
flatten(replace(a, replac_dict)) 
# Or if you want a list 
#list(flatten(replace(a, replac_dict))) 
+0

问题是如果你有嵌套列表不起作用。但无论如何,+1 –

+0

你没有提到你有嵌套列表。而且,实际上,另一种解决方案也不适用于嵌套列表。 – themiurgo