我在python list_alist_b中有两个列表。 list_a有一些图像链接,并且list_b也有。 99%的项目是相同的,但我必须知道这1%。所有剩余项都在list_a中,这意味着list_b中的所有项目都在list_a中。我最初的想法是减去所有项目:list_a - list_b = list_c,其中list_c是我的剩余商品。我的代码是:

list_a = []
list_b = []
list_c = []

arq_b = open('list_b.txt','r')
for b in arq_b:
    list_b.append(b)

arq_a = open('list_a.txt','r')
for a in arq_a:
    if a not in arq_b:
        list_c.append(a)

arq_c = open('list_c.txt','w')
for c in list_c:
    arq_c.write(c)

我认为逻辑是正确的,如果我有一些项目,则代码可以快速运行。但是我没有10个项目,或者1.000,甚至100.000。我的78.514.022中有 list_b.txt 项,列表78.616.777中有 list_a.txt 。我不知道这个表达式的代价:if a not in arq_b。但是,如果我执行此代码,我认为今年不会完成。

我的电脑有8GB,我为交换分配了15GB内存,以免使RAM不会爆炸。

我的问题是,还有另一种方法可以使此操作更有效(更快)?
  • list_a是纵坐标,而list_b不是纵坐标。
  • 每个项目的大小均为:images/00000cd9fc6ae2fe9ec4bbdb2bf27318f2babc00.png
  • 顺序不重要,我想知道剩余。
  • 最佳答案

    您可以创建一组第一个文件内容,然后根据所称的差异使用differencesymmetric_difference

    with open("list_a.txt") as f:
        set_a = set(f)
    
    with open("list_b.txt") as f:
        diffs = set_a.difference(f)
    

    如果list_b.txt包含的项目多于list_a.txt,则您要交换它们或根据需要使用set_a.symmetric_difference(f)
    difference(f)可以工作,但仍必须在内部构造一个新的set。性能提升不是很大(请参阅set issubset performance difference depending on the argument type),但是它更短。

    关于python - 从两个文件计算行的差异的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54128876/

    10-12 19:10