在python中,用另一个列表中的元素替换列表中的元素的最佳方法是什么?
例如,我有:
a = [ 1, 'replace_this', 4 ]
我想将replace_this
替换为[2, 3]
。更换后必须是:
a = [ 1, 2, 3, 4 ]
更新
当然,可以使用切片(对不起,我没有在问题中写出来),但问题是你有可能有多个{{ 1}}列表中的值。在这种情况下,您需要在循环中进行替换,这将变得不理想。
我认为使用replace_this
会更好,但我不确定。
答案 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)))