我有一个我想合并的“盒子定义”的排序列表。该列表看起来像:
big_list = [\
# ...
# ...
[3, 4, 5, 4, 5, 6, 65],\
[3, 4, 5, 4, 5, 6, 60],\
[3, 4, 5, 4, 5, 6, 55],\
[3, 4, 5, 4, 5, 6, 52],\
[3, 4, 5, 4, 5, 6, 23],\
[3, 4, 5, 4, 5, 6, 17],\
[3, 4, 5, 4, 5, 6, 0],\
[5, 8, 9, 6, 9, 10, 90],\
[5, 8, 9, 6, 9, 10, 84],\
[5, 8, 9, 6, 9, 10, 32],\
[5, 8, 9, 6, 9, 10, 0],\
# ...
# ...
[750, 800, 900, 751, 801, 901, 97],\
[750, 800, 900, 751, 801, 901, 24],\
[750, 800, 900, 751, 801, 901, 17],\
[750, 800, 900, 751, 801, 901, 16],\
[750, 800, 900, 751, 801, 901, 0]\
# ...
# ...
]
其中“格式”框为:[x1, y1, z1, x2, y2, z2, attribute],我们可以假设 dx=1, dy=1, dz=1
此外,我们可以假设列表已经按以下方式排序:
big_list=sorted(big_list, key=lambda n:n[6], reverse=True)
big_list=sorted(big_list, key=lambda n:n[2])
big_list=sorted(big_list, key=lambda n:n[1])
big_list=sorted(big_list, key=lambda n:n[0])
该列表可能有数百万个项目长,我想减少列表,以便任何离散的“盒子”只能获得最高的“属性”......所以在这种情况下,比如:
reduced_big_list = [\
[3, 4, 5, 4, 5, 6, 65],\
[5, 8, 9, 6, 9, 10, 90],\
[750, 800, 900, 751, 801, 901, 97]\
]
我目前在此列表中使用的方法类似于:
i = 0
while i < len(big_list)-1:
if big_list[i][0]==big_list[i+1][0]\
and big_list[i][1]==big_list[i+1][1]\
and big_list[i][2]==big_list[i+1][2] \
and big_list[i][6] >= big_list[i+1][6]:
del big_list[i+1]
else:
i=i+1
问题是当列表很“长”(1000 万+“盒子”)时,这个过程非常非常慢。
有没有一种聪明的方法可以并行化这个列表“抽取”过程或者加快这个过程?