Python:只设置存在检查?

Pau*_*jan 8 python hash set data-structures

我有一些很长的大字符串,我想要查找它们.我不需要保存整个字符串.据我所知,set()实际存储的字符串占用了我很多的记忆.

这样的数据结构是否存在?

done = hash_only_set()
while len(queue) > 0 :
   item = queue.pop()
   if item not in done :
      process(item)
      done.add(item)
Run Code Online (Sandbox Code Playgroud)

(我的队列不断被其他线程填充,所以我无法在开始时扣除它).

Mar*_*wis 10

保留一组唯一的哈希当然是可能的:

done = set()
while len(queue) > 0 :
   item = queue.pop()
   h = hash(item)
   if h not in done :
      process(item)
      done.add(h)
Run Code Online (Sandbox Code Playgroud)

请注意,由于哈希冲突,您可能会认为项目已完成,即使它不是.

如果你不能接受这种风险,你真的需要保存完整的字符串,以便能够判断你以前是否已经看过它.或者:也许处理本身就能说出来?

另外,如果您不能接受将字符串保留在内存中,请将它们保存在数据库中,或者在与字符串同名的目录中创建文件.