【问题标题】:How to iterate through all items in list in Python?如何遍历Python列表中的所有项目?
【发布时间】:2020-06-27 09:55:57
【问题描述】:

我正在尝试创建一个函数,该函数将从文本列表中查找项目,如果找到匹配项,则应将文本中找到的单词更改为“---”。


lst = ["str1", "str2", "str3"]

def censor_func_comp(email,lst):
   for words in lst:
      censored_text = email
      if words in censored_text:
         return censored_text.replace(str(words), "---")
   return censored_text

例如,我在列表中设置了三个项目,并且该功能正常工作,但仅针对列表中的第一项,而对其他两项则不起作用,我不明白为什么。

请不要给我完整的解决方案,我只需要了解为什么该功能不适用于列表中的所有项目。

【问题讨论】:

  • 由于您不希望有一个完整的解决方案,这就是问题所在:如果只找到一个单词,则返回替换的文本。这就是为什么不会在电子邮件中搜索后续单词的原因。使用您的解决方案,您应该在电子邮件中替换并在最后返回电子邮件。
  • @JürgenBayer 嗯...所以代码应该如下所示:对于 lst 中的单词:如果电子邮件中的单词:email.replace(str(words), "---") 返回电子邮件?不幸的是,它根本不起作用
  • if words in censored_text: 语句返回被替换的字符串并停止迭代,但它应该在替换字符串中的单词时继续循环。目前如果第一项符合条件,将返回第一个替换的结果(只需删除第一个return语句,censored_text = email是不相关的赋值)。

标签: python-3.x string str-replace


【解决方案1】:

我已经在评论中指出了代码中的错误,但是由于代码在 cmets 中无法正常工作,因此这里是解决方案:

def censor_func_comp(email, lst):
    censored_text = email
    for words in lst:
        if words in censored_text:
            censored_text = censored_text.replace(str(words), "---")
    return censored_text

关键是如果只找到并替换了一个搜索词,则该函数不能已经返回,而是搜索并替换其他单词。

【讨论】:

  • 非常感谢!现在我明白问题出在哪里了!
【解决方案2】:

您的代码有两个问题。首先,您在每次迭代时都返回字符串,它只替换第一个并返回结果。其次,replace 不对对象进行任何更改,它返回一个新对象。因此,您应该删除循环内返回,并在每次迭代时将 censored_text 替换为新的。

censored_text = censored_text.replace(str(word), "---")

顺便说一下,请在编辑器中输入您的代码,这将有助于其他人测试和编辑您的代码。

【讨论】:

    【解决方案3】:

    我假设emaillst 都是列表。所以你正在迭代lst 并检查words 是否存在于email 中。那么in 运算符对列表的作用是在列表中查找完全相同的项目。在您的情况下,它会尝试在 email 中找到 words 完全作为列表项。所以这是我对您的问题的解决方案,我希望这就是您正在寻找的,我没有发布代码:

    1. 将您的电子邮件列表转换为以' ' 分隔的字符串。
    2. 遍历lst 并在字符串中替换words in string
    3. 循环结束后返回字符串,用' ' 拆分,这样它就可以再次成为一个列表。

    如果email 是一个字符串,那么只需将return censored_text.replace(str(words), "---") 替换为email = censored_text.replace(str(words), "---")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多