Как исправить ошибку пропуска цикла 1 значение за раз? - PullRequest
0 голосов
/ 30 января 2019

Я делаю мини-школьный проект, и я получаю сообщение об ошибке, указанное в названии.Как мне решить мою ошибку?

Это для мини-проекта "футбольный менеджер", и я знаю, что моя ошибка - это одна строка!

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 голосов
/ 30 января 2019

Когда вы удаляете элемент из списка, используя

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

И так далее, пропуская каждое второе значение исходного списка.

Итак, прочитайте ваш код и посмотрите, где это может произойти.

Надеюсь, это поможет:)

0 голосов
/ 30 января 2019

Не следует перебирать индексы списка и удалять из него элементы одновременно .Именно это и вызывает ошибку.

К счастью, у вас есть пара альтернатив, выберите ту, которая вам удобнее:

  • Перебирайте индексы списка в обратном порядке, в этомкак вы можете безопасно удалить элементы.
  • Создайте новый список со всеми элементами, кроме тех, которые вы должны удалить.
  • Отметьте удаляемые элементы специальным значением (скажем,, None) и впоследствии удалите все из них одновременно, используя filter или понимание списка.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...