簡體   English   中英

Python for循環返回IndexError:列表索引超出范圍

[英]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:

什么時候:

  • i == 0,數字[i] == 1,數字[digits [i]] == 2
  • i == 1,數字[i] == 2,數字digits [digits [i]] == 3
  • i == 8,數字[i] == 9,和數字[digits [i]] == 10
  • i == 9,digits [i] == 10,&digits [digits [i]]引發IndexError

當您在列表的開頭添加0時,標識i == digits[i]適用於所有索引,並且您的代碼不會崩潰,但仍在執行雙索引,這不是您想要的。

您的代碼中有幾個問題:

  • 您正在假設e是一個索引。 不是,它是digits列表中的實際值 您的列表具有從0到9的索引,因此當e == 10 (最后一個元素)時,您將得到IndexError 沒有digits[10]

  • 您將templow設置為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM