如何修复循环错误一次跳过1个值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复循环错误一次跳过1个值?相关的知识,希望对你有一定的参考价值。

我做了一个迷你学校项目,我得到了标题中提到的错误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)]
答案

使用时从列表中删除项目时

list.remove(item)

它不会用null值替换项目,它会完全删除它,其余的元素取而代之。例如:

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

依此类推,跳过原始列表的每一秒值。

所以请仔细阅读您的代码,看看这可能发生的地方。

希望这可以帮助 :)

另一答案

您不应迭代列表的索引并同时从中删除元素。这就是导致错误的原因。

幸运的是,你有几个选择,选择一个你更舒服的选择:

  • 反向迭代列表索引,这样就可以无害地删除元素。
  • 创建一个新列表,其中包含除了您应删除的元素之外的所有元素。
  • 使用特殊值(例如,None)标记要删除的项目,然后使用filter或列表理解同时删除所有项目。

以上是关于如何修复循环错误一次跳过1个值?的主要内容,如果未能解决你的问题,请参考以下文章

跳过 for 循环中的第一个值

操作列表

如何修复错误:跳过导入行,所需类别“Nintendo DS / DS Lite / DSi”不存在

错误:E/RecyclerView:未连接适配器;跳过片段上的布局

如何修复:Xcode 9 构建循环直到退出代码 255

如何修复具有多个返回错误的条件的while循环