Python. Простые алгоритмы
- Python. Простые алгоритмы
- Просмотров: 462
3. Оценка производительности способов итераций по списку
Для оценки производительности способов итерации по числовому списку будем использовать модуль timeit.
Измерения производятся с помощью класса Timer. Конструктор класса имеет следующий формат:
timeit.repeat(stmt, setup, number, repeat)
В параметрах указываются:
- stmt - код (в виде строки), время выполнения которого необходимо измерить
- setup - указывается код (в виде строки), который будет выполнен перед измерением времени выполнения кода в параметре stmt
- number – указывается количество повторений. Если параметр не задан, то по умолчанию равен 1_000_000
- Метод timeit.repeat вызывает метод timeit() указанное в параметре repeat количество раз и возвращает список значений.
Для оценки производительности способов итерации по числовому списку создадим список из 10 000 элементов перед измерением затраченного времени для каждого способа.
Каждый способ повторим 1000 раз, а затем создадим список из 5 запусков timeit и найдем минимальное значение в этом списке. Так мы получим оценочное время выполнения способов итерации по числовому списку.
Вот код:
import timeit
setup = """
a = [x for x in range(10_000) ]
# """
Способ_1 = """
for x in a:
z=x
"""
Способ_2 = """
for i in range(len(a)):
z = a[i]
"""
Способ_3 = """
n = len(a)
i = 0
while i<n:
z=a[i]
i+=1
"""
Способ_4 = """
[x for x in a]
"""
Способ_5 = """
for i, item in enumerate(a):
z=item
"""
Способ_6 = """
it = iter(a)
try:
while True:
z = next(it)
except StopIteration:
pass
"""
sp1 = min(timeit.repeat(stmt=Способ_1, setup=setup, number = 1_000, repeat=5))
sp2 = min(timeit.repeat(stmt=Способ_2, setup=setup, number = 1_000, repeat=5))
sp3 = min(timeit.repeat(stmt=Способ_3, setup=setup, number = 1_000, repeat=5))
sp4 = min(timeit.repeat(stmt=Способ_4, setup=setup, number = 1_000, repeat=5))
sp5 = min(timeit.repeat(stmt=Способ_5, setup=setup, number = 1_000, repeat=5))
sp6 = min(timeit.repeat(stmt=Способ_6, setup=setup, number = 1_000, repeat=5))
print(f" Способ № 1 = {sp1:.4f}")
print(f" Способ № 2 = {sp2:.4f}")
print(f" Способ № 3 = {sp3:.4f}")
print(f" Способ № 4 = {sp4:.4f}")
print(f" Способ № 5 = {sp5:.4f}")
print(f" Способ № 6 = {sp6:.4f}")
Результаты:
Способ № 1 = 0.0994
Способ № 2 = 0.2813
Способ № 3 = 0.4848
Способ № 4 = 0.1188
Способ № 5 = 0.3090
Способ № 6 = 0.2196
Как видно из результата цикл for x in a работает намного быстрее, чем все остальные, на втором месте использование генератора for x in a, и самый медленный способ это цикл с while.