使用python3.7进行慢速列表解析以删除重复项

时间:2018-10-31 23:02:29

标签: python python-3.x duplicates bigdata

我正在尝试从一个大型文本文件中删除重复项,该文件包含2.5亿个4.4兆字节的项目。

让我印象深刻的是,我可以使用以下代码在几分钟之内将该文件加载到python列表中:

x = []

with open("online.txt") as file:
    for l in file:
       x.append(l)

    print('count of array: ')
    print(len(x))

但是,当我尝试简单地检查以确保在将下一个项目添加到数组之前不存在下一个项目时,要花很多小时才能完成。我觉得我缺少一些可以真正加快速度的简单事情。

这是我用来检查重复项的代码:

a = []
x = []

with open("online.txt") as file:
    for l in file:
        if l in a:
            print('duplicate')
            print(l)
        else:
            x.append(l.strip())
        a.append(l)

    print('with duplicates: ');
    print(len(a))
    print('without duplicates: ')
    print(len(x))

它运行在具有64 Gig ram内存和现代双至强处理器的服务器上。

2 个答案:

答案 0 :(得分:1)

问题在于一个简单的列表,python必须在添加一个新条目之前每次都搜索每个条目。

您可以尝试使用python字典或set而不是列表。这些数据结构可以更快地确定条目是否已经存在。

只需更改您的代码:

a = {}  # set
x = {}

with open("online.txt") as file:
    for l in file:
        if l in a:
            print('duplicate')
            print(l)
        else:
            x.add(l.strip())  # add to the set
        a.add(l)

您没有指定输入文件格式,但是通过将整个数据集加载到一个巨大的字符串中,然后使用python函数将其拆分,而不是像在这里手动进行那样,可能会提高速度。< / p>

答案 1 :(得分:0)

最后,这是我用来删除重复项的代码:

x = set([])

with open("all.txt") as file:
    for l in file:
       x.add(l)

    print('count of array: ')
    print(len(x))