在Python中用列表替换元素

3 投票
2 回答
3081 浏览
提问于 2025-04-17 14:58

在Python中,如何用另一个列表的元素替换一个列表中的某个元素,最好的方法是什么?

比如,我有:

a = [ 1, 'replace_this', 4 ]

我想把replace_this替换成[2, 3]。替换后应该变成:

a = [ 1, 2, 3, 4 ]

更新

当然,可以用切片来做到这一点(抱歉我在问题中没有提到),但问题是,列表中可能有多个replace_this的值。在这种情况下,你需要用循环来替换,这样效率就不高了。

我觉得用itertools.chain可能会更好,但我不太确定。

2 个回答

1

我建议使用一个生成器来替换元素,另外再用一个生成器来扁平化列表。假设你已经有一个能正常工作的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)))
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]

撰写回答