簡體   English   中英

如何解決每次跳過1個值的循環錯誤?

[英]How to fix for loop error skipping 1 value a time?

我正在做一個迷你學校項目,並且收到標題中提到的錯誤e。 我該如何解決我的錯誤?

這是一個迷你的“足球經理”項目,我知道我的錯誤是這一行!

equipas=['Napoli','Inter','Milan','Roma','Sampdoria','Atalanta','Lazio','Fiorentina','Torino','Sassuolo','Parma','Genoa','Cagliari','SPAL','Udinese','Empoli','Bologna','Frosinone','Chievo']    
for m in range(0,99):
    try:
        z=equipas[m]
    except IndexError:
        a+=1
        if a==3:
            break
    else:
        equipa=equipas[m]
        equipas.remove(equipa)
        pontos=random.randint(0,57)
        equipa=equipa,pontos
        listaequipa.append(equipa)
        print(listaequipa)

當程序打印變量listaequipa ,我只能在最后一行得到它:

[('Napoli', 44), ('Milan', 57), ('Sampdoria', 31), ('Lazio', 14), ('Torino', 3), ('Parma', 13), ('Cagliari', 51), ('Udinese', 8), ('Bologna', 21), ('Chievo', 38)]

您不應該遍歷列表的索引 同時從列表中刪除元素。 這就是導致錯誤的原因。

幸運的是,您有兩種選擇,請選擇一個您更習慣的選擇:

  • 反向遍歷列表索引,這樣就可以無害地刪除元素。
  • 創建一個新列表,其中包含所有應刪除的元素。
  • 使用特殊值(例如None )標記要刪除的項目,然后使用filter或列表理解功能一次刪除所有項目。

當您使用以下方法從列表中刪除項目時

list.remove(item)

它不會用空值代替該項目,而是將其完全刪除,其余元素代替它。 例如:

array = ['1', '2', '3', '4', '5', '6']
for x in range(5):
    array.remove(array[x])

在循環的第一遍之后,數組現在看起來像:

['2', '3', '4', '5', '6']

然后for循環將x遞增,因此它會刪除當前列表中的第二個元素:

['2', '4', '5', '6']

依此類推,跳過原始列表的第二個值。

因此,請仔細閱讀您的代碼,看看可能會在哪里發生。

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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