j'ai décidé d'aller de l'avant et de tester les versions proposées, j'ai trouvé le collections.Counter
comme suggéré par Jacob Gabrielson être le plus rapide, suivi de la version defaultdict
par Slott.
Voici mes codes: des collections importer defaultdict de collections importer Compteur
import random
# using default dict
def counter_default_dict(list):
count=defaultdict(int)
for i in list:
count[i]+=1
return count
# using normal dict
def counter_dict(list):
count={}
for i in list:
count.update({i:count.get(i,0)+1})
return count
# using count and dict
def counter_count(list):
count={i:list.count(i) for i in set(list)}
return count
# using count and dict
def counter_counter(list):
count = Counter(list)
return count
list=sorted([random.randint(0,250) for i in range(300)])
if __name__=='__main__':
from timeit import timeit
print("collections.Defaultdict ",timeit("counter_default_dict(list)", setup="from __main__ import counter_default_dict,list", number=1000))
print("Dict",timeit("counter_dict(list)",setup="from __main__ import counter_dict,list",number=1000))
print("list.count ",timeit("counter_count(list)", setup="from __main__ import counter_count,list", number=1000))
print("collections.Counter.count "timeit("counter_counter(list)", setup="from __main__ import counter_counter,list", number=1000))
Et mes résultats:
collections.Defaultdict
0.06787874956330614
Dict
0.15979115872995675
list.count
1.199258431219126
collections.Counter.count
0.025896202538920665
Do me faire savoir comment je peux améliorer l'analyse.
Peut-être définir ce que vous voulez dire par le mieux? Le plus efficace? La moindre quantité de code? Plus facile à comprendre? – Dana