我有两个嵌套列表,其中包含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
答案 0 :(得分:1)
您的问题是,对于主列表中的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]