Заменить один список строк списком строк в Python - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть список ["a","b","c","a"], где я хочу заменить "a" на ["a_1","b_1","c_1"], чтобы список стал ["a_1","b_1","c_1","b","c", "a_1","b_1","c_1"]

Какой самый быстрый способ сделать это в python?

Ответы [ 4 ]

0 голосов
/ 30 сентября 2018

Это хорошее место для простой функции генератора:

def lazy_replace(L, char, val):
    for item in L:
        if item == char:
            yield from val
        else:
            yield item

>>> L = list('abca')
>>> val = ['a_1', 'b_1', 'c_1']
>>> list(lazy_replace(L, 'a', val))
['a_1', 'b_1', 'c_1', 'b', 'c', 'a_1', 'b_1', 'c_1']
0 голосов
/ 30 сентября 2018

Вы можете использовать понимание с chain.from_iterable и троичным выражением:

from itertools import chain

L = list('abca')  # ['a', 'b', 'c', 'a']

rep_key, rep_val = ('a', ['a_1', 'b_1', 'c_1'])
res = list(chain.from_iterable([i] if i != rep_key else rep_val for i in L))

['a_1', 'b_1', 'c_1', 'b', 'c', 'a_1', 'b_1', 'c_1']
0 голосов
/ 30 сентября 2018

Если вы хотите поменять ваш список, то вы можете положиться на нарезку.Это действительно заменит элементов в вашем списке, а не создаст новый.

lst = ["a", "b", "c", "a"]
a_indices = [i for i, c in enumerate(lst) if c == "a"]

for i in reversed(a_indices):
    lst[i:i+1] = ['a_1', 'b_1', 'c_1']

print(lst) # ['a_1', 'b_1', 'c_1', 'b', 'c', 'a_1', 'b_1', 'c_1']
0 голосов
/ 30 сентября 2018

Используйте простой цикл for:

l = ["a", "b", "c", "a"]
for i in range(len(l)):
    if l[i] == "a":
        l[i] = "a_1"
        l+=["b_1", "c_1"]

>>> l
['a_1', 'b', 'c', 'a_1', 'b_1', 'c_1', 'b_1', 'c_1']
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...