如何在不使用嵌套" for"的情况下迭代两个列表?环
两个列表之间的索引不一定必须相同
更具体地说,我正在编写一个函数,它接受一个字符串列表和一个禁止字列表。如果任何禁止的单词都在每个字符串中,那么整个字符串都会被删除。
我尝试过:
for word in bannedWords:
for string in messages:
if word in string:
messages.remove( string )
然而,这并不起作用,因为字符串变量用于" for"循环,所以从消息中删除字符串会搞砸" for"环。什么是更好的实施方式?感谢。
答案 0 :(得分:2)
你可能会排成一行!
messages = [string for string in messages
if not any(word in bannedWords for word in string)]
答案 1 :(得分:1)
我可能会写一些类似的东西:
def filter_messages(messages, bannedWords):
for string in messages:
if all(word not in string for word in bannedWords):
yield string
现在你有一个生成器功能,它只会给你带来好消息。如果您确实要更新messages
,可以执行以下操作:
messages[:] = filter_messages(messages, bannedWords)
虽然就地要求很少见:
messages = list(filter_messages(messages, bannedWords))
答案 2 :(得分:0)
假设有一组禁止的单词和可能包含这些不良单词的字符串列表:
bannedWords = set("bad", "offensive")
messages = ["message containing a bad word", "i'm clean", "i'm offensive"]
cleaned = [x for x in messages if not any(y for y in bannedWords if y in x)]
结果:
>>> cleaned
["i'm clean"]
>>>