如何迭代两个列表而不使用嵌套" for"循环

时间:2016-05-25 17:59:16

标签: python python-2.7 for-loop

如何在不使用嵌套" for"的情况下迭代两个列表?环

两个列表之间的索引不一定必须相同

更具体地说,我正在编写一个函数,它接受一个字符串列表和一个禁止字列表。如果任何禁止的单词都在每个字符串中,那么整个字符串都会被删除。

我尝试过:

for word in bannedWords:
    for string in messages:
        if word in string:
            messages.remove( string )

然而,这并不起作用,因为字符串变量用于" for"循环,所以从消息中删除字符串会搞砸" for"环。什么是更好的实施方式?感谢。

3 个答案:

答案 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"]
>>>