1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #!/usr/bin/env python3
# coding: utf-8
import random
import string
# Génération de n mots de s lettres
def genere(n:int, s:slice):
mot=list()
# Le nb de lettres
for i in range(s.start, s.stop+1):
# Nb de mots (tous uniques)
tmp=set()
while len(tmp) < n: tmp.add("".join(random.sample(string.ascii_lowercase, i)))
mot+=list(tmp)
# for
# On doit pouvoir faire ça en une ligne mais bon, faut pas non plus pousser mémé dans les orties
return mot
# genere()
# La liste des mots de base (tous uniques)
base=genere(25000, slice(4, 8))
print("Base : %s" % len(base))
#print(base)
#exit(0)
# On duplique la liste de base n fois (comme ça on aura des mots déjà vus)
mots=base * 4
print("Mots : %s" % len(mots))
# Check des mots via set
def check_set(mots):
check=set()
for m in mots:
if m in check: continue
check.add(m)
# for
#print(len(check))
# check_set()
# Check des mots via list
def check_list(mots):
check=list()
for m in mots:
if m in check: continue
check.append(m)
# for
#print(len(check))
# check_list()
# Check des mots via dict
def check_dict(mots):
check=dict()
for m in mots:
if m in check: continue
check[m]=None
# for
#print(len(check))
# check_dict()
# Les fonctions à tester
import timeit
from functools import partial
fct={
"set" : check_set,
#"list" : check_list,
"dict" : check_dict,
}
# Pour vérifier que les fonctions... fonctionnent
#for v in fct.values():
#v(mots)
#exit(0)
# Le nombre de répétitions (les moyennes se feront sur cette valeur)
repeat=20
# Appel des fonctions dans un ordre aléatoire et affichage du chrono
print("start=%d, repeat=%d" % (len(mots), repeat))
for (k, v) in random.sample(fct.items(), len(fct)):
t=timeit.Timer(partial(v, mots)).repeat(repeat=repeat, number=100)
print("%s: min=%f, max=%f, avg=%f" % (k, min(t), max(t), sum(t)/len(t)))
# for |
Partager