首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替换列表中的元素-使用包含所述元素的嵌套列表(python3)

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

Stack Overflow用户
提问于 2021-01-12 12:24:22
回答 2查看 62关注 0票数 2

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

代码语言:javascript
复制
list = ['cow','orange','apple','mango']
to_replace = 'orange', 'apple'
replace_with = ['banana','cream']

所需输出:

代码语言:javascript
复制
['cow', ['banana', 'cream'], 'mango']

我已经阅读了这个问题1中的答案,并尝试了其中提到的函数:

代码语言:javascript
复制
def replace_item(list, to_replace, replace_with):
    for n,i in enumerate(list):
      if i== to_replace:
         list[n]=replace_with
    return list

但它什么也做不了。我还尝试了一个基本的等式函数:

代码语言:javascript
复制
list[1:3] = ['banana','cream']

然而,这两种方法都不起作用。有没有一个函数来完成这个任务呢?在我的实际问题中是一个循环,list[1:3]是一个迭代器,即list[i:i+2]。我不确定这是否会有所不同。要替换的项目将始终是连续的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-12 12:37:30

试试这个:

代码语言:javascript
复制
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"]

票数 2
EN

Stack Overflow用户

发布于 2021-01-12 12:33:44

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
['cow', ['banana', 'cream'], 'mango']

首先,不要将您的变量命名为与对象类型相同的名称。这是一个糟糕的想法,可能会导致代码混乱/bug等。

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

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

然后替换lst[n],将lst[n+1]设置为nothing,并返回一个使用列表理解从nothing元素中清除的列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65678030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档