3

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

例如,我有:

a = [ 1, 'replace_this', 4 ]

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

a = [ 1, 2, 3, 4 ]

更新

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

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

4

2 回答 2

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]
于 2013-02-06T14:19:29.177 回答
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)))
于 2013-02-06T16:54:14.030 回答