tôi quyết định đi trước và kiểm tra các phiên bản đề nghị, tôi thấy collections.Counter
theo đề nghị của Jacob Gabrielson là nhanh nhất, tiếp theo là phiên bản defaultdict
bởi Slott.
Dưới đây là mã của tôi: từ bộ sưu tập nhập defaultdict từ bộ sưu tập nhập 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))
Và kết quả của tôi:
collections.Defaultdict
0.06787874956330614
Dict
0.15979115872995675
list.count
1.199258431219126
collections.Counter.count
0.025896202538920665
Đỗ cho tôi biết thế nào tôi có thể cải thiện việc phân tích.
Có thể xác định ý bạn là gì nhất? Hiệu quả nhất? Số lượng mã tối thiểu? Dễ hiểu nhất? – Dana