【问题标题】:Replace elements in list - with a nested list containing said elements (python3)替换列表中的元素 - 使用包含所述元素的嵌套列表(python3)
【发布时间】:2021-04-17 01:19:21
【问题描述】:

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

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]。我不确定这是否会有所作为。要替换的项目将始终是连续的。

【问题讨论】:

    标签: python list replace nested nested-lists


    【解决方案1】:
    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 而不是==

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

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

    【讨论】:

    • 非常感谢,由于某种原因,在我的循环中,这给了我“索引超出范围”错误,不确定错误来自哪里,但上面的解决方案有效
    • 好!如果有帮助,请考虑接受答案;)
    【解决方案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"]

    【讨论】:

      猜你喜欢
      • 2018-04-18
      • 2020-09-11
      • 2014-08-13
      • 2016-02-09
      • 1970-01-01
      • 2021-11-26
      • 2018-04-15
      • 2018-10-13
      • 2015-04-20
      相关资源
      最近更新 更多