使用Python中的嵌套列表推导过滤掉列表中的项目

时间:2013-07-27 09:20:23

标签: python list python-2.7 list-comprehension

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

我希望所有的句子都不包含单词列表中的任何单词。

我正在尝试使用列表推导来实现这一目标。例如:

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

但是,它似乎没有工作,因为我收到错误告诉我在分配之前使用了变量。

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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() function来测试禁用的字词:

[sentence for sentence in sentences if not any(banned_word in sentence for banned_word in words)]
仅在找到any()值之前,

True遍历生成器表达式;在句子中发现被禁词的那一刻,它就会停止工作。这至少会更有效率。