<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 1A.1 - Histogramme et dictionnaire
Compter les occurences de nombres dans une liste est assez facile avec un dictionnaire et on peut l'écrire de plusieurs manières différentes.
Step1:  Mesurer le temps que cela prend 
Step2:  Comparons avec une autre implémentation 
Step3:  Une version plus rapide 
Step4:  Une dernière avec cytoolz 
<ASSISTANT_TASK:>
Python Code:
import random
num = [random.randint(0,10) for i in range(1000)]
hist = {}
for i in num:
    hist[i] = hist.get(i, 0) + 1
hist
Explanation: 1A.1 - Histogramme et dictionnaire
Compter les occurences de nombres dans une liste est assez facile avec un dictionnaire et on peut l'écrire de plusieurs manières différentes.
End of explanation
def count1(num):
    hist = {}
    for i in num:
        hist[i] = hist.get(i, 0) + 1
    return hist
%timeit count1(num)
Explanation: Mesurer le temps que cela prend :
End of explanation
def count2(num):
    hist = {}
    for i in num:
        if i in hist:
            hist[i] += 1
        else:
            hist[i] = 1
    return hist
%timeit count2(num)
Explanation: Comparons avec une autre implémentation :
End of explanation
from collections import Counter
def count3(num):
    return Counter(num)
%timeit count3(num)
Explanation: Une version plus rapide :
End of explanation
from cytoolz import count, groupby
import cytoolz
def count4(num):
    return list(cytoolz.map(lambda x: (x[0], count(x[1])), 
                    groupby(lambda x:x, num).items()))
%timeit count4(num)
Explanation: Une dernière avec cytoolz :
End of explanation
<END_TASK>