Soit une liste de tuples myList = [(1,2,67),(1,2,5),(1,2,1)]
Y-a-t'il une méthode plus efficace pour trier cette liste (selon le 3ième élément des tuples par exemple) que:
myList.sort(key=operator.itemgetter(2))
??
Merci
Soit une liste de tuples myList = [(1,2,67),(1,2,5),(1,2,1)]
Y-a-t'il une méthode plus efficace pour trier cette liste (selon le 3ième élément des tuples par exemple) que:
myList.sort(key=operator.itemgetter(2))
??
Merci
Bonsoir,
en quête de l'optimisation du python?
Je savais pas trop quoi repondre, j'ai testé trois fonctions, ta methode, la methode que j'utiliserais sans l'utilisation de operator et la fonction de tri classique:J'obtiens:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 import random import operator from timeit import Timer ITERATIONS = 100 def f1(liste): liste.sort(key=operator.itemgetter(2)) return liste def f2(liste): l = [(j[2], i) for i,j in enumerate(liste)] l.sort() r = [liste[item[1]] for item in l] return r def f3(liste): liste.sort() return liste if __name__ == '__main__': liste = [] for i in range(5000): item = (1, 2, random.randint(0, 5000)) liste.append(item) t1 = Timer('f1(liste)', 'from __main__ import f1, liste') t2 = Timer('f2(liste)', 'from __main__ import f2, liste') t3 = Timer('f3(liste)', 'from __main__ import f3, liste') print "\tf1:", min(t1.repeat(3,ITERATIONS)), "s" print "\tf2:", min(t2.repeat(3,ITERATIONS)), "s" print "\tf3:", min(t3.repeat(3,ITERATIONS)), "s"Si tes deux premiers elements sont differents, ce qui est probable, ta methode est la meilleure,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 f1: 0.160201507429 s f2: 0.503010642293 s f3: 0.0658277932257 s
voila, voila....
Partager