[英]Python for loop returning IndexError: list index out of range
我最近才開始學習python。 我正在嘗試在數字列表中找到最低的整數。 相反,我得到這個錯誤:
Traceback (most recent call last):
File "H:/Python/untitled/08_python.py", line 32, in <module>
if digits[e] < temp:
IndexError: list index out of range
我意識到您可以使用min(digits),但我想到目前為止我會挑戰我的知識。 我很可能犯了一個簡單的錯誤,並且沒有正確診斷。 如果我在列表中扔0,一切正常。
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
low = 0
temp = 0
for e in digits:
if digits[e] < temp:
low = digits[e]
temp = digits[e]
print(low)
for e in digits
直接遍歷列表的內容 。 由於e
已經是值而不是索引,因此您此時無需使用digits[e]
。 這也是為什么它失敗的原因,因為digits[10]
在列表的末尾。
其他小注釋-由於您從low = 0
開始,因此您的代碼僅適用於正數; 如果列表中只有負數,則結果仍然為0
。
通過在開始時將其設置為None
並進行檢查來避免這種情況的一種方法:
low = None
for e in digits:
if low is None or low < e:
low = e
print(low)
for e in digits
大致翻譯為:
for i in range(0, len(digits)):
e = digits[i]
因此,您的代碼變為:
for i in range(0, len(digits)):
if digits[digits[i]] < temp:
什么時候:
IndexError
當您在列表的開頭添加0
時,標識i == digits[i]
適用於所有索引,並且您的代碼不會崩潰,但仍在執行雙索引,這不是您想要的。
您的代碼中有幾個問題:
您正在假設e
是一個索引。 不是,它是digits
列表中的實際值 。 您的列表具有從0到9的索引,因此當e == 10
(最后一個元素)時,您將得到IndexError
; 沒有digits[10]
。
您將temp
和low
設置為0
。 您的digits
值都不低於0
因此您永遠找不到e < temp
為真的任何值。 您需要選擇一個很高的值。 float('inf')
是一個人工的“最高”值(無窮大),在此類測試中效果很好; 任何整數值都小於無窮大。
您不需要temp
變量和low
變量。 您只需要一個或另一個來測試后面的值是否仍然更低。
然后,工作代碼如下所示:
low = float('inf')
for e in digits:
if e < low:
low = e
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.