在Python中用列表替换元素
在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]