gpt4 book ai didi

Python:列表理解 - 更快的选择?

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:57 25 4
gpt4 key购买 nike

我有两个列表:

  1. 单词列表 allwords(~100.000 个元素)
  2. 停用词列表 stopwords(~2.000 个元素)

我想从列表 allwords 中生成一个新列表 selectedwords,其中包含所有不在 stopwords 中的词。

我通过下面的列表理解实现了这一点

selectedwords = [word.lower() for word in allwords  if word.lower() not in stopwords]

问题:有没有更聪明的方法可以加快计算速度(使用 python)。我是 python 的新手,非常感谢任何建议。

谢谢!

最佳答案

stopwords设为set,这样not in检查就快了。

编辑:一些基准测试将它与@deceze 的方式进行比较(我删除了 .lower() 和停用词集的准备(无论如何它很小)以关注实际差异两种方式)。

from timeit import timeit

allwords = list(map(str, range(100000)))
stopwords = list(map(str, range(0, 100000, 50)))

stopwords_set = set(stopwords)

for _ in range(3):
print(timeit(lambda: [word for word in allwords if word not in stopwords_set], number=100),
timeit(lambda: set(allwords) - stopwords_set, number=100))

输出(三轮,左边是list comprehension,右边是set difference):

0.5209118997490783 0.9618692664857642
0.5104636869544419 0.9020013947776662
0.48269282831284466 0.8888132040554915

所以在这个测试中,列表理解始终比集合差异快得多。

为了比较,使用停用词列表进行测试:

>>> timeit(lambda: [word for word in allwords if word not in stopwords], number=100)
271.4802689439021

关于Python:列表理解 - 更快的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42140793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com