如何解决每次跳过1个值的循环错误?

时间:2019-01-30 20:36:40

标签: python for-loop

我正在做一个小型学校项目,我得到标题中提到的错误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)]

2 个答案:

答案 0 :(得分:1)

您不应遍历列表的索引,并且不能同时从列表中删除元素 。这就是导致错误的原因。

幸运的是,您有两种选择,请选择一个您更习惯的选择:

  • 反向遍历列表索引,这样可以无害地删除元素。
  • 使用所有要删除的元素创建一个新列表。
  • 使用特殊值(例如None)标记要删除的项目,然后使用filter或列表理解功能一次将其全部删除。

答案 1 :(得分:0)

使用以下方法从列表中删除项目时

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']

以此类推,跳过原始列表的第二个值。

因此,请仔细阅读您的代码,看看可能会在哪里发生。

希望这会有所帮助:)