0

私が取っているクラスのpython割り当てに取り組んでいますが、このKeyErrorを乗り越える方法がわかりません。Python の辞書で del 演算子を使用するタイミングを計ろうとしています。ここに私のコードを示します。

from timeit import Timer


def build_dict(n): # build dict = { 0:"0", 1:"1", 2:"2", ... n:"n" }
    return {i : str(i) for i in range(n)}  

def dictionaryx(x,n):
    del x[0]
    del x[n//2]
    del x[n-1]

timeDict = Timer(
    "dictionaryx(x,n)",
    "from __main__ import n,build_dict,dictionaryx; x = build_dict(n)")


for size in range(1000, 100000+1, 5000):
    n = size
    dict_secs = timeDict.repeat(5,5)
    print(n, "\t", min(dict_secs))

このコードを実行しようとするたびに、次のエラーが発生します

トレースバック (最後の最後の呼び出し): ファイル "/Users/mcastro/PycharmProjects/untitled1/testdel.py"、21 行目、dict_secs = timeDict.repeat(5,5) ファイル "/Library/Frameworks/Python.framework/Versions /3.5/lib/python3.5/timeit.py"、206 行目、繰り返し t = self.timeit(number) ファイル "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/timeit. py"、178 行目、timeit timing = self.inner(it, self.timer) ファイル ""、6 行目、内部ファイル "/Users/mcastro/PycharmProjects/untitled1/testdel.py"、10 行目、dictionaryx 内デル x[0] KeyError: 0

エラーが参照しているキーが存在するが削除できないことを理解している限り、このエラーが発生する理由や修正方法がわかりませんか? どんな助けでも大歓迎です

4

1 に答える 1

1

ループは毎回timeit同じ辞書を使用しています。x最初に を呼び出すとdictionaryx(x,n)、要素 0 が削除されるため、次に呼び出すときには存在しません。

def build_dict(n): # build dict = { 0:"0", 1:"1", 2:"2", ... n:"n" }
    return {i : str(i) for i in range(n)}

def dictionaryx(x,n):
    del x[0]
    del x[n//2]
    del x[n-1]

n = 1000
x = build_dict(n)
dictionaryx(x,n)    # this deletes x[0]
dictionaryx(x,n)    # this causes the error
于 2015-10-16T21:35:09.363 に答える