首页 > 解决方案 > 使用python3.7进行慢列表解析以去除重复项

问题描述

我正在尝试从包含 4.4 GB 的 2.5 亿个项目的大型文本文件中删除重复项目。

让我印象深刻的是,我可以使用以下代码在几分钟内将此文件加载到 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 Gigs 内存和现代双至强处理器的服务器上运行的。

标签: pythonpython-3.xduplicatesbigdata

解决方案


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

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

只需更改您的代码:

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 函数将其拆分,而不是像您在此处那样手动进行。


推荐阅读