Python 无法实现 timeit 模块
Python can't implement timeit module
这是一个基础练习。我只是不知道如何正确实现 timeit 模块。我一直收到语法错误
import timeit
import random
def bubblesort(LAux):
for i in range(len(LAux)):
exchange = False
for j in range(len(LAux)-1):
if LAux[j] > LAux[j+1]:
tmp = LAux[j+1]
LAux[j+1] = LAux[j]
LAux[j] = tmp
exchange = True
if not exchange:
break
return(LAux)
a=int(input("Size of list: "))
lst = [0]*a
for i in range(a):
lst[i] = random.randint(1,100)
print(bubblesort(lst))
print(timeit.timeit()
您似乎误解了 timeit.timeit
的功能 - 这个想法是您告诉它实际计时的内容,然后它会计时。通常,它会做很多很多次计时的事情,因此您可以获得有意义的平均值。这意味着它还需要提供一个 'setup' 参数,因为每个测试的列表大概应该不同。如果需要,请参阅文档中的示例 - 我通常发现它们很容易满足您的目的。我在下面实现了 timeit:
a=int(input("Size of list: "))
n = 100000
setup = "lst = [random.randrange(100) for _ in range(a)]"
time = timeit.timeit("bubblesort(lst)", setup=setup, globals=globals(), number=n)
print("{} sorts took {}s".format(n, time))
当然,如果您使用 IPython,您可以这样做:
In [1]: from bubble import bubblesort
In [2]: from random import randrange
In [3]: %timeit bubblesort([randrange(100) for _ in range(50)])
10000 loops, best of 3: 175 µs per loop
也许您希望 timeit() 告诉您时间已经过去了多少。如果是这样,这可以使用 time
模块来完成,非常简单。
import time
start_time = time.time()
bubblesort(lst)
time_taken = time.time() - start_time
print("One sort took {}s".format(time_taken))
另一方面,我建议为参数使用不同的名称 "Laux"。如您所见,SO 的语法突出显示认为它是 class,因为通常以大写字母开头的任何内容都是 class。作为局外人,Laux 也没有特别告诉我它是什么,虽然我可以从名字 bubblesort 中推断出来。
这是一个基础练习。我只是不知道如何正确实现 timeit 模块。我一直收到语法错误
import timeit
import random
def bubblesort(LAux):
for i in range(len(LAux)):
exchange = False
for j in range(len(LAux)-1):
if LAux[j] > LAux[j+1]:
tmp = LAux[j+1]
LAux[j+1] = LAux[j]
LAux[j] = tmp
exchange = True
if not exchange:
break
return(LAux)
a=int(input("Size of list: "))
lst = [0]*a
for i in range(a):
lst[i] = random.randint(1,100)
print(bubblesort(lst))
print(timeit.timeit()
您似乎误解了 timeit.timeit
的功能 - 这个想法是您告诉它实际计时的内容,然后它会计时。通常,它会做很多很多次计时的事情,因此您可以获得有意义的平均值。这意味着它还需要提供一个 'setup' 参数,因为每个测试的列表大概应该不同。如果需要,请参阅文档中的示例 - 我通常发现它们很容易满足您的目的。我在下面实现了 timeit:
a=int(input("Size of list: "))
n = 100000
setup = "lst = [random.randrange(100) for _ in range(a)]"
time = timeit.timeit("bubblesort(lst)", setup=setup, globals=globals(), number=n)
print("{} sorts took {}s".format(n, time))
当然,如果您使用 IPython,您可以这样做:
In [1]: from bubble import bubblesort
In [2]: from random import randrange
In [3]: %timeit bubblesort([randrange(100) for _ in range(50)])
10000 loops, best of 3: 175 µs per loop
也许您希望 timeit() 告诉您时间已经过去了多少。如果是这样,这可以使用 time
模块来完成,非常简单。
import time
start_time = time.time()
bubblesort(lst)
time_taken = time.time() - start_time
print("One sort took {}s".format(time_taken))
另一方面,我建议为参数使用不同的名称 "Laux"。如您所见,SO 的语法突出显示认为它是 class,因为通常以大写字母开头的任何内容都是 class。作为局外人,Laux 也没有特别告诉我它是什么,虽然我可以从名字 bubblesort 中推断出来。