Составьте список по значению

У 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
58
1

Ответы 1

Самый питонический способ сделать это, который я смог найти:

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]

Где вы можете просто выбрать, какое значение заменить и на что. Это, правда, не плоский список. Если он вам нужен, это должно быть полезно (взято из здесь):

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

Он должен работать как задумано.

Другие вопросы по теме