#!/usr/bin/env python3
import timeit
def f1(lst):
lst_min = [index for index, value in enumerate(lst) if value == min(lst)]
lst_max = [index for index, value in enumerate(lst) if value == max(lst)]
return (min(lst), len(lst_min), lst_min), (max(lst), len(lst_max), lst_max)
def f2(lst):
emin = emax = lst[0]
nmin = nmax = 1
ind = {'min': [0], 'max': [0]}
for i in range(1, len(lst)):
e = lst[i]
if e < emin:
emin, nmin = e, 1
ind['min'] = [i]
elif e == emin:
nmin += 1
ind['min'].append(i)
if e > emax:
emax, nmax = e, 1
ind['max'] = [i]
elif e == emax:
nmax += 1
ind['max'].append(i)
return (emin, nmin, ind['min']), (emax, nmax, ind['max'])
t1 = timeit.Timer('f1([2, 5, 10, 4, 4, 1, 7, 23, 12, 32, 44, 1, 5, 8, 44, 2, 13, 44])', 'from __main__ import f1')
t2 = timeit.Timer('f2([2, 5, 10, 4, 4, 1, 7, 23, 12, 32, 44, 1, 5, 8, 44, 2, 13, 44])', 'from __main__ import f2')
print(t1.repeat(3, 1000))
print(t2.repeat(3, 1000))
[guest@localhost minmax]$ ./timecmp.py
[0.03950845999952435, 0.03923851000035938, 0.04115687200010143]
[0.008653074999529053, 0.008569304999582528, 0.008533624999472522]
[guest@localhost minmax]$
Budulianin
Ресурсов меньше ест ?
по ресурсам одно и то же примерно, а по времени однопроходная в тридцать раз быстрее
add
#!/usr/bin/env python3
import timeit
def f1(lst):
emin = emax = lst[0]
nmin = nmax = 1
ind = {'min': [0], 'max': [0]}
for i in range(1, len(lst)):
e = lst[i]
if e < emin:
emin, nmin = e, 1
ind['min'] = [i]
elif e == emin:
nmin += 1
ind['min'].append(i)
if e > emax:
emax, nmax = e, 1
ind['max'] = [i]
elif e == emax:
nmax += 1
ind['max'].append(i)
return (emin, nmin, ind['min']), (emax, nmax, ind['max'])
def f2(lst):
mine, maxe = min(lst), max(lst)
lst_min = [index for index, value in enumerate(lst) if value == mine]
lst_max = [index for index, value in enumerate(lst) if value == maxe]
return (mine, len(lst_min), lst_min), (maxe, len(lst_max), lst_max)
t1 = timeit.Timer('f1([2, 5, 10, 4, 4, 1, 7, 23, 12, 32, 44, 1, 5, 8, 44, 2, 13, 44])', 'from __main__ import f1')
t2 = timeit.Timer('f2([2, 5, 10, 4, 4, 1, 7, 23, 12, 32, 44, 1, 5, 8, 44, 2, 13, 44])', 'from __main__ import f2')
print(t1.repeat(3, 10000))
print(t2.repeat(3, 10000))
[guest@localhost minmax]$ ./timecmp.py
[0.08802562800002534, 0.08860798599999953, 0.08851004199999579]
[0.08316544199999498, 0.08345718800001123, 0.08323813999999174]
[guest@localhost minmax]$
переделал, заменив повторное вычисление
одинаково по скорости