将 中的元素替换为包含所述元素的嵌套列表 (python3)



我正在尝试将列表中的元素替换为包含所述元素的列表,例如:

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

期望输出:

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

我已经阅读了这个问题 1 中的答案并尝试了那里提到的功能:

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

但是两者都不起作用。是否有功能来实现此目的?在我的实际问题中,这是一个循环,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))

输出:

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

首先,不要将 var 与对象类型同名。这是一个坏主意,可能会导致代码混乱/错误等。

在你的函数中,问题本质上是字符串(i)和列表(lst)之间的==运算符永远不会说True而不管其余的。 另外,列表中的字符串中的内容与字符串中的内容不同。所以你用in而不是==.

在此之后,如果您不想重复并希望用单个['banana','cream']替换相邻的'orange', 'apple',则需要在迭代时检查lst[n+1]

然后替换lst[n],将lst[n+1]设置为无,并使用列表推导返回从无元素中清除的列表。

最新更新