如何遍历 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), "---")
顺便说一下,请在编辑器中输入您的代码,这将有助于其他人测试和编辑您的代码。
我假设 email
和 lst
都是列表。因此,您正在遍历 lst
并检查 words
是否存在于 email
中。那么 in
运算符对列表所做的是它在列表中查找完全相同的项目。在您的情况下,它将尝试在 email
中准确地找到 words
作为列表项。所以这是我对你的问题的解决方案,我希望这就是你正在寻找的,我不会发布代码:
- 将您的电子邮件列表转换为由
' '
分隔的字符串。
- 迭代
lst
并在字符串中替换 words in string
。
- 循环结束后 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,而是搜索并替换其他词。
我正在尝试制作一个函数,该函数将从文本列表中查找项目,如果找到匹配项,则应将文本中找到的单词更改为“---”。
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), "---")
顺便说一下,请在编辑器中输入您的代码,这将有助于其他人测试和编辑您的代码。
我假设 email
和 lst
都是列表。因此,您正在遍历 lst
并检查 words
是否存在于 email
中。那么 in
运算符对列表所做的是它在列表中查找完全相同的项目。在您的情况下,它将尝试在 email
中准确地找到 words
作为列表项。所以这是我对你的问题的解决方案,我希望这就是你正在寻找的,我不会发布代码:
- 将您的电子邮件列表转换为由
' '
分隔的字符串。 - 迭代
lst
并在字符串中替换words in string
。 - 循环结束后 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,而是搜索并替换其他词。