A有一个值列表。我想从列表中删除特定值的出现,并在以前的位置插入多个值(该值仅发生一次)。代码中也是如此:
values = [1, 2, 3, 4, 5]
index = values.index(3)
values[index:index+1] = ['a', 'b', 'c']
# values == [1, 2, 'a', 'b', 'c', 4, 5]
我觉得它不太可读。有内置的方法可以做到这一点吗?如果没有,将其转换为功能的最佳方法是什么?
这是我想出的最好的代码:
def splice_by_value(iterable, to_remove, *to_insert):
for item in iterable:
if item == to_remove:
for insert in to_insert:
yield insert
else:
yield item
我正在使用Python 3.7。
答案 0 :(得分:0)
我能找到的最pythonic的方式是:
values = [1, 2, 3, 4, 5]
value = 3
replace = ['a', 'b', 'c']
def splice(values, value, replace):
result = [replace if x == value else x for x in values]
您可以在其中选择要替换的值以及要替换的值。 但是,这是非固定清单。如果您需要将其放平,这应该会有所帮助(摘自here):
def flat_gen(x):
def iselement(e):
return not(isinstance(e, Iterable) and not isinstance(e, str))
for el in x:
if iselement(el):
yield el
else:
for sub in flat_gen(el): yield sub
因此,如果您使用类似的内容:
result_flat = list(flat_gen(result))
它应该按预期工作。