python - 如何设计一个实验来比较 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))
但它失败并显示错误消息 IndexError:
列表分配索引超出范围。
如何修复代码以解决练习号。3?
解决方案
del
将列表更改到位,因此您正在减小其大小,但您永远不会调整randrange
每个 timeit 循环来补偿 - 例如 -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))
推荐阅读
- python - Python pandas - 基于标准的索引查找
- python - 单击两个按钮后的网页抓取
- r - 在终端中打印函数的输出
- python - 以 24 个为一组,浏览范围内的所有文件
- datagrid - 如何将多查询传递给Master Details c#
- python - 从我的石头剪刀布电脑决斗中不断得到相同的结果
- python - Python:如果其他值为真,则计算嵌套字典中值的出现次数
- ios - 如何在 SwiftUI 中即时更新视图?
- javascript - Material UI React Autocomplete TypeError
- php - php 表单,在将帖子提交到两个数据库表时