Использование Timeit в цикле while и увеличение размера ввода - PullRequest
0 голосов
/ 02 февраля 2019

Я в тупике.По сути, у меня есть две функции, которые принимают ввод (который представляет собой список случайно сгенерированных чисел).

Затем я хотел выяснить размер списка ввода, в котором время, необходимое для выполнения обеих функций, равноравно.

Вот что у меня есть:

def function1(inputlist):
    #does something to inputlist

def function2(inputlist):
    #does same thing to inputlist as before but in different way

time1 = timeit.timeit(stmt="function1(random.sample([x for x in range(0, 20000), 10)",setup = "from file import function1,input",number=100)

time2 = timeit.timeit(stmt="function2(random.sample([x for x in range(0, 20000), 10)",setup = "from file import function2,input",number=100)

i=0
while time1<time2:
    time1 = timeit.timeit(stmt="function1(random.sample([x for x in range(0, 20000), i)",setup = "from file import function1",number=100)

    time2 = timeit.timeit(stmt="function2(random.sample([x for x in range(0, 20000), i)",setup = "from file import function2",number=100)

    i = i+1

print(i)

Я не могу понять это.Я перепробовал все, что мог найти.Я знаю, что вы не можете ссылаться на внешние переменные при использовании timeit, поэтому я попытался обойти это тоже.Мне в основном нужен какой-либо метод, где я могу увеличить входную сторону функции и вычислять каждый раз.

Заранее большое спасибо.Я боролся с этим уже больше суток.

1 Ответ

0 голосов
/ 02 февраля 2019

Я думаю, что самый простой способ - это отформатировать строку соответствующим образом:

Вместо

stmt="function1(random.sample([x for x in range(0, 20000)], i))"

write

stmt=f"function1(random.sample([x for x in range(0, 20000)], {i}))"

Это установит текущийзначение i где {i} стоит.См. документы для получения дополнительной информации.

...