len, random.randrange, timeit.Timerの使い方と引数の意味について
お疲れ様です。pythonに余り触れたことのない初心者です。
下記のプログラムについて、幾つか不明な点があるため質問させて頂きます。
randrange(len(x) - 1 )とはどこまでの範囲なのでしょうか?
len(x)とは何でしょう?-1の理由がいまいち分かりません...random_indexとはdel_dict_itemsという名の関数にrandrangeの範囲でランダムな要素を入れるという理解でよろしいのでしょうか?except KeyErrorでsetdefaultでindexにNoneという要素を入れた時、なぜKeyErrorが実行されるようになるのでしょうか?
Noneを要素を入れたら辞書型のdelは実行できる、という理解でよろしいのしょうか。timeit.Timerの()の中のfrom __main__ import randomとは何でしょう?またt.dictのtimeit.timerの()のdel_dict_items(x)とdel_dict_itemsの違いは何でしょう?
以上が私が理解できなかった部分です。
お手数ですが、手助け頂ければ幸いです。
import timeit
import random
def del_dict_items(x):
random_index = random.randrange(len(x) - 1)
try:
del x[random_index]
except KeyError:
x.setdefault(random_index, None)
del x[random_index]
print("i\t\tlist_del_time\t\tdict_del_time")
for i in range(100000, 1000001, 20000):
t_list = timeit.Timer("del x[random.randrange(len(x)-1)]", "from __main__ import random, x")
t_dict = timeit.Timer("del_dict_items(x)", "from __main__ import random, x, del_dict_items")
x = list(range(i))
list_del_time = t_list.timeit(number=1000)
x = {j:None for j in range(i)}
dict_del_time = t_dict.timeit(number=1000)
print("%d %10.3f %20.3f" %(i, list_del_time, dict_del_time))