簡體   English   中英

用python中的字符串列表替換一個字符串列表

[英]Replace one string list with list of strings in python

我有一個列表["a","b","c","a"] ,其中我想將["a_1","b_1","c_1"] "a"替換為["a_1","b_1","c_1"] ,以使列表變為["a_1","b_1","c_1","b","c", "a_1","b_1","c_1"]

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

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

使用簡單的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']
>>> 

這是一個簡單的生成器函數的好地方:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM