Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何设计一个实验来比较del操作符在列表和字典上的性能?_Python_Python 3.x - Fatal编程技术网

Python 我如何设计一个实验来比较del操作符在列表和字典上的性能?

Python 我如何设计一个实验来比较del操作符在列表和字典上的性能?,python,python-3.x,Python,Python 3.x,我想解决中的编程练习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.tim

我想解决中的编程练习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))
但它失败,并显示错误消息Indexer:

列表分配索引超出范围


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

del
对列表进行适当的修改,以减小其大小,但您永远不会每次调整
randrange
以进行补偿-例如,拾取的
randrange
始终是列表的原始大小,因此,可以选择一个大于当前列表的值,并尝试
del
它将为您提供
索引器。您可以调整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))

除了您遇到的问题:您的
del x[random.randrange(%d)]%i
乘以
randrange
del
。这不是一个好时机。只尝试计时
del
而不进行其他调用。问题本身是,当您多次调用
del
timeit
这样做)时,列表会变小,因此您有时会尝试删除其中较长的项目。每次尝试创建一个新列表(但不要在创建列表时计时)@zvone感谢您的明智评论。我意识到我的问题是什么。我也应该承认,我真的在为“randrange”和“del”计时。谢谢你的帮助。现在我在代码中发现了bug。现在我可以用你加载的代码解决我的问题了。