替换列表中的元素 - 使用包含所述元素的嵌套列表 (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']
期望的输出:
['cow', ['banana', 'cream'], 'mango']
我已经阅读了这个问题的答案 并尝试了那里提到的功能:
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]
。我不确定这是否有所作为。要替换的项目将始终是连续的。
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 与对象类型同名。这是一个坏主意,可能导致代码 confusion/bugs 等
在您的函数中,问题本质上是字符串 (i
) 和列表 (lst
) 之间的 ==
运算符永远不会说 True
无论如何其余的部分。另外,列表中字符串的内容与您的字符串中的内容不同。所以你使用 in
而不是 ==
.
在此之后,如果您不想重复并希望将相邻的 'orange', 'apple'
替换为单个 ['banana','cream']
,则需要在迭代时检查 lst[n+1]
。
然后替换 lst[n]
,将 lst[n+1]
设置为空,并 return 使用列表理解从空元素中清除列表。
试试这个:
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"]
我正在尝试用包含所述元素的列表替换列表中的元素,例如:
list = ['cow','orange','apple','mango']
to_replace = 'orange', 'apple'
replace_with = ['banana','cream']
期望的输出:
['cow', ['banana', 'cream'], 'mango']
我已经阅读了这个问题的答案
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]
。我不确定这是否有所作为。要替换的项目将始终是连续的。
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 与对象类型同名。这是一个坏主意,可能导致代码 confusion/bugs 等
在您的函数中,问题本质上是字符串 (i
) 和列表 (lst
) 之间的 ==
运算符永远不会说 True
无论如何其余的部分。另外,列表中字符串的内容与您的字符串中的内容不同。所以你使用 in
而不是 ==
.
在此之后,如果您不想重复并希望将相邻的 'orange', 'apple'
替换为单个 ['banana','cream']
,则需要在迭代时检查 lst[n+1]
。
然后替换 lst[n]
,将 lst[n+1]
设置为空,并 return 使用列表理解从空元素中清除列表。
试试这个:
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"]