根据值拼接列表

时间:2018-10-31 11:17:39

标签: python python-3.x list

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。

1 个答案:

答案 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))

它应该按预期工作。