用python中的字符串列表替换一个字符串列表

用python中的字符串列表替换一个字符串列表,python,python-3.x,list,Python,Python 3.x,List,我有一个列表[a,b,c,a],我想用[a_1,b_1,c_1]替换a,这样列表变成[a_1,b_1,c_1,b,c,a_1,b_1,c_1] 在python中,最快的方法是什么?使用一个简单的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"] 使用一个简单的for循环: l = ["a", "b",

我有一个列表[a,b,c,a],我想用[a_1,b_1,c_1]替换a,这样列表变成[a_1,b_1,c_1,b,c,a_1,b_1,c_1]

在python中,最快的方法是什么?

使用一个简单的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"]
使用一个简单的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"]

您可以使用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']

您可以使用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']
如果你想改变你的列表,那么你可以依靠切片。这确实会替换列表中的元素,而不是创建新的元素

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']
如果你想改变你的列表,那么你可以依靠切片。这确实会替换列表中的元素,而不是创建新的元素

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

这是一个简单发电机功能的好地方:

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

这是一个简单发电机功能的好地方:

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

是否要替换列表中的每个a?如果输入列表不同,是否应更改替换为的内容?是的,您是正确的。我已经修改了示例。是否要替换列表中的每个a?如果输入列表不同,是否应更改替换为的内容?是的,您是正确的。我修改了我的例子