Я провел тест между двумя общими процедурами в моем коде, который обнаружил, сколько существует графов по n вершинам, чтобы увидеть, какой метод подсчета элементов сгенерированного списка идет быстрее. У Sage есть генератор графов (n), который генерирует все графы по n вершинам. Я создал две функции, которые получают длину списка, полученного итератором двумя различными способами, и рассчитал время каждой из них (в среднем по 100 тестам), используя функцию time.time (). Функции были следующими:
def test_code_list(n):
l = graphs(n)
return len(list(l))
и
def test_code_sum(n):
S = sum(1 for _ in graphs(n))
return S
Теперь у меня время каждого метода
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
среднее время метода списка = 0.0391882109642
метод средней суммы времени = 0,0418473792076
Таким образом, вычисляя количество графов по n = 5 вершинам таким образом, метод списка немного быстрее (хотя 100 тестовых прогонов не большой размер выборки). Но когда я увеличил длину списка, вычисляемого путем попытки построения графиков на n = 7 вершинах (т. Е. Изменив графы (5) на графы (7)), результат был таков:
среднее время метода списка = 4.14753051996
метод средней суммы времени = 3,96504004002
В этом случае метод суммирования был немного быстрее. В целом, эти два метода примерно одинаковы, но разница МОЖЕТ зависеть от длины вашего списка (возможно, просто я усреднил только 100 тестовых прогонов, что не очень много - это заняло бы вечность в противном случае).