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))