Я тест между двумя общими процедурами в некотором коде шахты, который находит, как много графиков на п вершин есть , чтобы увидеть, какой метод подсчета элементов сгенерированного списка идет быстрее. У 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 тестовых прогонов не являются большим размером выборки). Но когда я увеличил длину списка вычисляемого пробуя графики на п = 7 вершин (т.е. изменение графика (5) на графики (7)), результат был таков:
среднего времени метода списка = +4,14753051996
средняя сумма метод время = 3.96504004002
В этом случае метод суммы был немного быстрее. В общем, эти два метода имеют примерно одинаковую скорость, но разница MIGHT зависит от длины вашего списка (может быть, просто было то, что я только усреднял более 100 тестовых прогонов, что было не очень высоким - навсегда в противном случае).
, чтобы подсчитать количество строк, которые вы будете загружать в память в любом случае! – hasen
списки (все типы последовательностей) также являются итерабельными.что вы имеете в виду «итератор» – hop
@ хасен: да, но не все сразу. – Claudiu