簡體   English   中英

替換列表中的元素 - 使用包含所述元素的嵌套列表(python3)

[英]Replace elements in list - with a nested list containing said elements (python3)

我正在嘗試用包含所述元素的列表替換列表中的元素,例如:

list = ['cow','orange','apple','mango']
to_replace = 'orange', 'apple'
replace_with = ['banana','cream']

所需的 output:

['cow', ['banana', 'cream'], 'mango']

我已閱讀此問題1中的答案並嘗試了此處提到的 function:

def replace_item(list, to_replace, replace_with):
    for n,i in enumerate(list):
      if i== to_replace:
         list[n]=replace_with
    return list

但它什么也沒做。 我還嘗試了一個基本的相等函數:

list[1:3] = ['banana','cream']

但是,兩者都不起作用。 有沒有 function 來完成這個? 在我的實際問題中,它是一個循環, list[1:3]是一個迭代器,即list[i:i+2] 我不確定這是否會有所作為。 要替換的項目將始終是連續的。

嘗試這個:

List[1:3] = [["banana", "cream"]]

這不起作用的原因是因為當您編寫時: List[1:3] = ["banana", "cream"]您正在用列表替換列表。 換句話說,您將["orange", "apple"]更改為["banana", "cream"]

執行此操作時: List[1:3] = [["banana", "cream"]]將列表替換為列表中的列表,將["orange", "apple"]替換為[["banana","cream"]] ,從而將"orange", "apple"替換為["banana", "cream"]

def replace_item(lst, to_replace, replace_with):
    for n,i in enumerate(lst):
      if i in to_replace and lst[n+1] in to_replace:
         lst[n]=replace_with
         lst[n+1] = ""
    return [item for item in lst if item]

lst = ['cow','orange','apple','mango']
to_replace = 'orange', 'apple'
replace_with = ['banana','cream']

print (replace_item(lst, to_replace, replace_with))

Output:

['cow', ['banana', 'cream'], 'mango']

首先,不要將您的 var 稱為與 object 類型相同的名稱。 這是一個壞主意,可能導致代碼混亂/錯誤等。

在您的 function 中,問題本質上是字符串( i )和列表( lst )之間的==運算符永遠不會說True無論 rest。 另外,列表中字符串中的內容與您的字符串中的內容不同。 所以你使用in而不是==

在此之后,如果您不想重復並希望將相鄰'orange', 'apple'替換為單個['banana','cream'] ,則需要在迭代時檢查lst[n+1] .

然后你替換lst[n] ,將lst[n+1]設置為空,並返回一個使用列表推導從空元素中清除的列表。

暫無
暫無

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

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