Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修复每次跳过1个值的循环错误?_Python_For Loop - Fatal编程技术网

Python 如何修复每次跳过1个值的循环错误?

Python 如何修复每次跳过1个值的循环错误?,python,for-loop,Python,For Loop,我在做一个迷你学校项目,我得到了标题中提到的错误e。如何解决我的错误 这是一个迷你“足球经理”项目,我知道我的错误是这一行 equipas=['Napoli','Inter','Milan','Roma','Sampdoria','Atalanta','Lazio','Fiorentina','Torino','Sassuolo','Parma','Genoa','Cagliari','SPAL','Udinese','Empoli','Bologna','Frosinone','Chievo'

我在做一个迷你学校项目,我得到了标题中提到的错误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']
依此类推,跳过原始列表的每一秒值

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


希望这有帮助:)

那么问题是?运行
equipas后,想想列表中的
“Inter”
索引是什么。删除(equipa)
。你能将完整的错误回溯编辑到问题中吗?@mad\ux。问题是为什么循环会跳过值,我如何解决it@glibdud你说的是所有的输出吗?如果我在
equipas
@AndreLopes中迭代了你正在使用索引遍历的列表,同时你要从中移除元素。想想看,这是行不通的:每次删除一个元素时,索引的范围都会改变,因为列表中的元素越来越少。但是您永远不会重新计算范围,因此会发生错误。