如何设计一个实验来比较列表和字典上 del 运算符的性能?



我想使用 python ch.2 解决算法和数据结构问题中的编程练习 3。该练习希望我设计一个实验来比较 del 运算符在列表和字典上的性能。

我的代码是

import timeit
import random
for i in range(10000,1000001,20000):
t = timeit.Timer("del x[random.randrange(%d)]" % i, "from __main__ import random, x")
x = list(range(i))
lst_time = t.timeit(number=1000)
x = {j:None for j in range(i)}
d_time = t.timeit(number=1000)
print("%d,%10.3f,%10.3f" % (i, lst_time, d_time))

但它失败并显示错误消息索引错误:

列出超出范围的分配索引。

如何修复代码以解决练习 3?

>del就地改变列表,因此您可以减小其大小,但您永远不会调整每次循环的randrange以进行补偿 - 例如 - 选择randrange将始终是列表的原始大小,因此可以选择一个大于列表当前值的值并尝试del它会给你IndexError。您可以调整 timeit 以使用具有当时列表长度的 randrange,而不是硬编码的起点,例如:

t = timeit.Timer("del x[random.randrange(len(x))]", "from __main__ import random, x")

旁注:x = {j:None for j in range(i)}可以写成x = dict.fromkeys(range(i))

相关内容

  • 没有找到相关文章

最新更新