J'ai fait un test entre les deux procédures courantes dans un de mes codes, qui calcule le nombre de graphes sur n sommets, pour voir quelle méthode de comptage des éléments d'une liste générée est la plus rapide. Sage dispose d'un générateur graphs(n) qui génère tous les graphes sur n sommets. J'ai créé deux fonctions qui obtiennent la longueur d'une liste obtenue par un itérateur de deux manières différentes et j'ai chronométré chacune d'entre elles (en faisant une moyenne sur 100 essais) à l'aide de la fonction time.time(). Les fonctions sont les suivantes :
def test_code_list(n):
l = graphs(n)
return len(list(l))
et
def test_code_sum(n):
S = sum(1 for _ in graphs(n))
return S
Maintenant, je chronomètre chaque méthode
import time
t0 = time.time()
for i in range(100):
test_code_list(5)
t1 = time.time()
avg_time = (t1-t0)/10
print 'average list method time = %s' % avg_time
t0 = time.time()
for i in range(100):
test_code_sum(5)
t1 = time.time()
avg_time = (t1-t0)/100
print "average sum method time = %s" % avg_time
temps moyen de la méthode des listes = 0,0391882109642
temps moyen de la méthode de la somme = 0,0418473792076
Ainsi, en calculant le nombre de graphes sur n=5 sommets de cette manière, la méthode de la liste est légèrement plus rapide (bien que 100 essais ne constituent pas un échantillon de grande taille). Mais lorsque j'ai augmenté la longueur de la liste calculée en essayant des graphes sur n=7 sommets (c'est-à-dire en remplaçant graphes(5) par graphes(7)), le résultat a été le suivant :
temps moyen de la méthode des listes = 4.14753051996
temps moyen de la méthode de la somme = 3,96504004002
Dans ce cas, la méthode de la somme était légèrement plus rapide. Dans l'ensemble, les deux méthodes sont à peu près aussi rapides l'une que l'autre, mais la différence peut dépendre de la longueur de votre liste (il se peut aussi que je n'aie fait qu'une moyenne de 100 essais, ce qui n'est pas très élevé - cela aurait pris une éternité dans le cas contraire).