繁体   English   中英

Python:搜索长字符串是否在字符串列表中的最快方法

[英]Python: Fastest way to search if long string is in list of strings

我从存储的文本文件中输入了大约2-5百万个字符串,每个字符串约400个字符。 在将重复项添加到我要检查的列表之前,我需要检查重复项(不必是列表,可以是任何其他数据类型,从技术上讲,列表是一组,因为所有项都是唯一的)。

我可以预期最大数据量中约有0.01%是不唯一的,因此需要过滤掉它们。

我想知道是否有更快的方法可以检查项目是否存在于列表中,而不是:

a=[]
for item in data:
    if item not in a:
        a.add(item)

我不想失去订单。

哈希会更快(我不需要加密)吗? 但随后,我必须维护一个哈希表,以首先检查所有值。 有什么我想念的吗?

我在python 2上,最大可以增加到python 3.5。

这个问题很难回答,因为它一直在变化;-)我正在回答的版本询问是否有比以下方法更快的方法:

a=[]
for item in data:
    if item not in a:
        a.add(item)

这将非常慢,花费len(data)时间是二次方。 在任何版本的Python中,以下代码都会在len(data)采用预期情况下的线性时间:

seen = set()
for item in data:
    if item not in seen:
        seen.add(item)
        emit(item)

其中的emit()执行您喜欢的任何操作(附加到列表,写入文件等)。

在注释中,我已经指出了使用有序字典来实现相同目的的方法(无论是通过Python 3.7中的语言保证还是通过collections包中的OrderedDict类型进行排序)。 不过,上面的代码是最节省内存的。

你可以试试看

a = list(set(data))

列表是元素的有序序列,而集合是元素的无序列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM