C'est presque la même question que here, sauf que je pose des questions sur la solution la plus efficace pour un résultat trié.comment compter de façon optimale les éléments dans une liste python
J'ai une liste (environ 10 entiers au hasard entre 0 et 12), par exemple:
the_list = [5, 7, 6, 5, 5, 4, 4, 7, 5, 4]
Je veux créer une fonction qui retourne une liste de tuples (point, compte) commandé par le premier élément, par exemple
output = [(4, 3), (5, 4), (6, 1), (7, 2)]
jusqu'à présent, j'ai utilisé:
def dupli(the_list):
return [(item, the_list.count(item)) for item in sorted(set(the_list))]
Mais j'appeler ce fonctionne presque un millon de temps et j'ai besoin de le faire aussi vite que je peux (python). Par conséquent ma question: Comment rendre cette fonction moins de temps comsuming? (? Qu'en est-mémoire)
J'ai joué un peu, mais rien d'évident venu:
from timeit import Timer as T
number=10000
setup = "the_list=[5, 7, 6, 5, 5, 4, 4, 7, 5, 4]"
stmt = "[(item, the_list.count(item)) for item in sorted(set(the_list))]"
T(stmt=stmt, setup=setup).timeit(number=number)
Out[230]: 0.058799982070922852
stmt = "L = []; \nfor item in sorted(set(the_list)): \n L.append((item, the_list.count(item)))"
T(stmt=stmt, setup=setup).timeit(number=number)
Out[233]: 0.065041065216064453
stmt = "[(item, the_list.count(item)) for item in set(sorted(the_list))]"
T(stmt=stmt, setup=setup).timeit(number=number)
Out[236]: 0.098351955413818359
Merci
Christophe
Quelle version python utilisez-vous? –
En tant que programmeur, je me demanderais pas "Comment puis-je faire cette chose prend moins de temps?" mais "Comment puis-je éviter de le faire un million de fois?" Êtes-vous certain que votre algorithme qui nécessite cette fonction est optimal à plus grande échelle pour commencer? – DGH
Si vous appelez votre fonction "presque un million de fois", cela prendra environ 5 secondes - est-ce vraiment un problème? –