检查两个长嵌套列表中的变量时加快 for 循环

Speed up a for loop when checking variables in two long nested lists

我有两个嵌套列表,每个列表包含 15000 个列表,每个列表有 5 个变量。我检查每个子列表中的两个变量与另一个变量以查找匹配项。如果两个变量都匹配,则不应执行任何操作,如果不匹配,子列表 lagerProduct 中的变量应设置为 0,并且 lagerProduct 应附加到 self.mainlist。最终输出是 self.mainlist,它包含所有 self.hovedfil + 来自 self.lagerfil 的子列表。工作代码如下,但速度不是很快。我怎样才能加快速度?

match = False
self.lagerFil = self.mainlist #15000 sublists with 5 values in each sublist
self.hovedFil = [[]] #15000 sublists with 5 values in each sublist
for lagerProduct in self.lagerFil:
    for produktHoved in self.hovedFil:
        if lagerProduct[0] == produktHoved[0] and lagerProduct[3] == produktHoved[3]:
            match = True

    if match == False:
        lagerProduct [4] = 0
        self.mainlist.append(lagerProduct)
    else:
        match = False

您的问题是,对于 mainlist 中的 15000 个元素中的每一个,您在 hovedFil 中迭代了 15000 多个元素(即使在找到匹配项之后您继续检查剩余的元素),也就是 2.25 亿次迭代。

还有其他问题,例如您在遍历 self.mainlsit 的同时还附加到它(只是为列表分配另一个名称不会复制列表)。

您应该将 hovedFil 转换为 set(),然后搜索变为 O(1),并且应该使用匹配的产品构建一个单独的列表:

matches = set((p[0], p[3]) for p in self.hovedFil)
matchedProducts = [
    lagerProduct for lagerProduct in self.lagerFil
    if (lagerProduct[0], lagerProduct[3]) not in matches]