我有一个花费太多时间的python代码(它实际上从未完成)
imp_pos_words = ' '.join([i for i in pos_word_ls if i not in unimp_words])
'unimp_words'是99,000个字母单词的列表 'pos_word_ls'是15,40,000个字母单词的列表
我实际上想省略'pos_word_ls'中'unimp_words'中的所有单词
PS:'pos_word_ls'有重复的单词,所以我无法输入它到一个集合并执行减去。
请帮助:)
答案 0 :(得分:1)
仅set
使用unimp_words
。 i not in
查找速度会快得多。
unimp_words = set(unimp_words)
imp_pos_words = ' '.join([i for i in pos_word_ls if i not in unimp_words])
如果是列表,if i not in unimp_words
每次检查一个单词时都必须遍历整个列表。集散列查找速度快得多,列表理解速度也快99,000倍。
答案 1 :(得分:1)
当您检查if i not in unimp_words
时,您正在遍历整个列表以查找列表中是否有i
,其中是否需要O(n)时间,其中n是列表的长度。由于你要做15,40,000次,所以它会非常慢。
相反,您可以使用的是设置,这会更快。这是因为当您检查项目是否在集合中时,使用散列函数来找出集合中i
的位置,这需要O(1)时间。
要将列表unimp_words
转换为集合,您可以使用unimp_words = set(unimp_words)
。现在,当您检查if i not in unimp_words
时,它应该更快。