【发布时间】:2018-12-12 02:07:25
【问题描述】:
正如 Python 文档所说,我认为 bisect 模块比 list 内置方法、索引和插入要快得多,以便将项目插入长有序列表。所以,我只是测量bisect_func() 和insert_func() 这两个函数的时间开销,如下面的代码。
bisect_func() 得分 1.27s 和 insert_func() 得分 1.38s,这不是一个戏剧性的时差。我的问题是,在这个例子中我是否遗漏了一些测试 bisect 效率的东西?或者 bisect 不是将项目插入有序列表的唯一有效方法?
import bisect
HAYSTACK = [n for n in range(100000000)]
NEEDLES = [0, 10, 30, 400, 700, 1000, 1100, 2200, 3600, 32000, 999999]
def bisect_func():
for needle in reversed(NEEDLES):
bisect.insort(HAYSTACK, needle)
def insert_func():
for needle in reversed(NEEDLES):
position = HAYSTACK.index(needle)
HAYSTACK.insert(position, needle)
if __name__ == '__main__':
import time
start = time.time()
# bisect_func()
insert_func()
end = time.time()
print(end - start)
【问题讨论】:
-
这不是一个公平的测试(我不知道它是否会影响总冠军)但您应该使用
timeit而不是依赖全局变量