在Python中从另一个列表中排除一个列表中的项目的有效方法

bra*_*adj 3 python string list tokenize stop-words

我有一个包含8000个字符串(stop_words)的列表,以及一个包含各种长度的100,000个字符串的列表,其中包含数百万个单词.我正在使用该函数来标记100,000个字符串,并从列表stop_words中排除非字母数字标记和标记.

    def tokenizer(text):

       return [stemmer.stem(tok.lower()) for tok in nltk.word_tokenize(text)/ 
       if tok.isalpha() and tok.lower() not in stop_words]
Run Code Online (Sandbox Code Playgroud)

我已经使用600个字符串测试了这段代码,需要60秒.如果我删除条件以排除停用词,则在相同的600个字符串上需要1秒钟

    def tokenizer(text):

       return [stemmer.stem(tok.lower()) for tok in nltk.word_tokenize(text)/ 
       if tok.isalpha()]
Run Code Online (Sandbox Code Playgroud)

我希望有一种更有效的方法可以从另一个列表中排除一个列表中的项目.

我很感激任何帮助或建议

谢谢

Ign*_*ams 5

stop_words一组,以便查找是O(1)替代.

stop_words = set(('word1', 'word2', 'word3'))
Run Code Online (Sandbox Code Playgroud)