[英]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.