【发布时间】:2023-03-20 20:47:01
【问题描述】:
我在 python list_a 和 list_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。我的list_b.txt 中有78.514.022 项,我的列表list_a.txt 中有78.616.777。我不知道这个表达式的成本:if a not in arq_b。但是如果我执行这段代码,我认为不会在今年完成。
我的电脑有 8GB,我分配了 15GB 用于交换,以免我的 RAM 爆炸。
我的问题是,还有另一种方法可以让这个操作更高效(更快)吗?
-
list_a是纵坐标,而list_b不是。 - 每个项目都有这个尺寸:
images/00000cd9fc6ae2fe9ec4bbdb2bf27318f2babc00.png - 顺序无所谓,我想知道剩余的。
【问题讨论】:
-
顺序重要吗?如果没有,请尝试使用集合。对于集合,减法应该是线性的:
set_c = set_a - set_b. -
但是可以在 python 中实现吗?
-
python会用最高效的方式进行这个操作吗?
-
是的,我的意思是 Python 数据类型
set。 -
@tripleee 这不是重复的 - 这个问题是关于在列表上映射减法,这个问题是关于列表中包含的内容之间的区别。
标签: python python-3.x list performance difference