我在python list_alist_b中有两个列表.list_a有一些图片链接,list_b也有.99%的项目是相同的,但我必须知道这1%.所有剩余项目都在list_a中,这意味着list_b中的所有项目都在list_a中.我最初的 idea 是减go 所有项目:

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件,或78.514.0220件,甚至10万件.我的list_b.txt表中有100项,list_a.txt表中有102项.我不知道这个表达的代价:if a not in arq_b.但如果我执行这段代码,我想今年不会完成.

我的电脑有8GB,我分配15gb用于交换,以避免内存爆炸.

我的问题是,还有另一种方法可以让这个操作更高效(更快)?

  • 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件,就换成set_a.symmetric_difference(f)件.

difference(f)可以工作,但仍然需要在内部建造一个新的set.这不是一个很好的增益(见set issubset performance difference depending on the argument type).

Python-3.x相关问答推荐

使用数据库将文件从Sharepoint下载到文件系统

visual studio代码窗口中未激活虚拟环境11

如何在当前测试中使用fixture 转换后的数据进行参数化?

Django中自动设置/更新字段

如何立即从asyncio.Task获取异常?

提取图像中的背景并保存

使用 multiprocessing 处理图像

包含值超出范围的 ID 的新 DataFrame 列?

为什么 return node.next 会返回整个链表?

有没有办法使用 python opencv 计算与图像的白色距离

Python:如何从句子/段落中提取地址(非正则表达式方法)?

ImportError:无法从jinja2导入名称escape

如何使用 Selenium by class_name 从大学橄榄球数据中抓取图像 url 列表

运行 PyCharm 测试时如何解决django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库?

无法在 Windows Python 3.5 上安装 Levenshtein 距离包

理解 Keras 的 ImageDataGenerator 类中的 `width_shift_range` 和 `height_shift_range` 参数

Python 解包运算符 (*)

如何在 Python 中计算 cohen 的 d?

在 Alembic 迁移期间更新列内容

注册 Celery 基于类的任务