如何遍历 Python 列表中的所有项目?

How to iterate through all items in list in Python?

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


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

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

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

您的代码有两个问题。首先,您在每次迭代中 returning 字符串,它只替换第一个字符串并将 return 结果。其次,replace 不会对对象做任何更改,它 return 是一个新对象。因此,您应该删除循环中的 return,并在每次迭代中将 censored_text 替换为新的。

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

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

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

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

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

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

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

关键是如果只找到并替换一个搜索词,该函数不能return,而是搜索并替换其他词。