postanowiłem iść dalej i przetestować wersje zasugerował, znalazłem collections.Counter
jak sugeruje Jacob Gabrielson być najszybszy, a następnie wersji defaultdict
przez Slott.
Oto moje kody: ze zbiorów importować defaultdict ze zbiorów importować Counter
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))
i moich wyników:
collections.Defaultdict
0.06787874956330614
Dict
0.15979115872995675
list.count
1.199258431219126
collections.Counter.count
0.025896202538920665
daj mi znać, jak mogę poprawić analizę.
Może zdefiniować, co masz na myśli przez najlepsze? Najbardziej wydajny? Mniejsza ilość kodu? Najłatwiejszy do zrozumienia? – Dana