J'ai une liste triée de "définitions de boîtes" que j'aimerais consolider. La liste ressemble à:Paralléliser une consolidation de liste en Python
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]\
# ...
# ...
]
Lorsque la case "format" est le suivant: [x1, y1, z1, x2, y2, z2, attribut], et on peut supposer dx = 1, dy = 1, dz = 1
en outre, on peut supposer la liste a déjà été triés par quelque chose comme:
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])
la liste peut être plusieurs millions d'articles longs, et je voudrais réduire la liste de sorte que toute discrète "box" obtient seulement le plus haut "attribut" ... donc quelque chose dans ce cas comme:
reduced_big_list = [\
[3, 4, 5, 4, 5, 6, 65],\
[5, 8, 9, 6, 9, 10, 90],\
[750, 800, 900, 751, 801, 901, 97]\
]
La méthode que je me sers actuellement sur cette liste est quelque chose comme:
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
Le problème est que lorsque la liste est « long » (10 millions + « boîtes »), le processus est très, très lent.
Existe-t-il une manière intelligente de paralléliser ce processus de "décimation" de liste ou peut-être d'accélérer ce processus?
Indication non liée: les caractères de continuation de ligne ne sont pas nécessaires lorsque vous divisez des listes sur plusieurs lignes. L'analyseur remarquera qu'une expression entre parenthèses n'a pas fini et continuera l'analyse sur la ligne suivante, même en l'absence d'une barre oblique inverse. – SingleNegationElimination