用python中的列表替换元素

时间:2013-02-06 14:16:51

标签: python list

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

例如,我有:

a = [ 1, 'replace_this', 4 ]

我想将replace_this替换为[2, 3]。更换后必须是:

a = [ 1, 2, 3, 4 ]

更新

当然,可以使用切片(对不起,我没有在问题中写出来),但问题是你有可能有多个{{ 1}}列表中的值。在这种情况下,您需要在循环中进行替换,这将变得不理想。

我认为使用replace_this会更好,但我不确定。

2 个答案:

答案 0 :(得分:12)

你可以使用切片:

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

正如@mgilson指出的那样 - 如果你碰巧不知道要替换的元素的位置,那么你可以使用a.index找到它......(见他的评论)

与不使用切片有关的更新

使用itertools.chain,确保replacements具有可迭代次数:

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]

答案 1 :(得分: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)))