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