1

我有两个清单。一个包含句子,另一个包含单词。

我想要所有的句子,其中不包含单词列表中的任何单词。

我正在尝试通过列表推导来实现这一目标。例子:

cleared_sentences = [sentence for sentence in sentences if banned_word for word in words not in sentence]

但是,它似乎不起作用,因为我收到一条错误消息,告诉我在分配之前使用了一个变量。

我试过寻找嵌套的理解,我确信这一定是被要求的,但我找不到任何东西。

我怎样才能做到这一点?

4

1 回答 1

3

你把顺序搞混了:

[sentence for sentence in sentences for word in words if banned_word not in sentence]

并不是说这会起作用,因为它会列出sentence每次被禁止的单词确实出现在句子中的时间。看看完全扩展的嵌套循环版本:

for sentence in sentences:
    for word in words:
        if banned_word not in sentence:
            result.append(sentence)

改为使用该any()函数来测试禁用词:

[sentence for sentence in sentences if not any(banned_word in sentence for banned_word in words)]

any()只在生成器表达式上循环,直到True找到一个值;一旦在句子中发现禁用词,它就会停止工作。这至少效率更高。

于 2013-07-27T09:22:06.453 回答