【发布时间】:2011-10-29 22:20:15
【问题描述】:
我必须检查包含 10-100k 这些元素的列表中是否存在数百万个元素(20-30 个字母 str)。在 python 中有比set() 更快的方法吗?
import sys
#load ids
ids = set( x.strip() for x in open(idfile) )
for line in sys.stdin:
id=line.strip()
if id in ids:
#print fastq
print id
#update ids
ids.remove( id )
【问题讨论】:
-
你实际得到了什么样的时间?
-
60 秒,c++ 中的算法(使用 tr1/unordered_set)在 18 秒内完成相同的操作...
-
一定要按顺序检查吗?创建两个集合,创建一个交集,然后从您正在检查成员资格的集合中减去该交集可能会更快。
-
这很模糊。您需要提供人们可以实际运行的可重现结果。
-
我刚刚看到你对速度的评论——Python 比 C++ 慢大约 3 倍。对于许多用途而言,这实际上对 Python 来说非常好。您是否分析过 Python 代码?有多少时间用于检查集合成员资格,有多少时间用于其他事情?
标签: python performance set fastq