Заменить элемент списком в python

В python, что является лучшим способом заменить элемент в списке элементами из другого списка?

Например, у меня есть:

a = [ 1, 'replace_this', 4 ] 

Я хочу заменить replace_this на [2, 3] . После замены необходимо:

 a = [ 1, 2, 3, 4 ] 

Обновить

Конечно, можно делать с нарезкой (извините, что я не писал его в вопросе), но проблема в том, что возможно, что в списке имеется более одного значения replace_this . В этом случае вам нужно выполнить замену в цикле, и это становится неоптимальным.

Я думаю, что было бы лучше использовать itertools.chain , но я не уверен.

Вы можете просто нарезать:

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

Я бы пошел с генератором, чтобы заменить элементы, и еще один генератор, чтобы сгладить его. Предполагая, что у вас есть рабочий 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)))