Python: индекс списка вне диапазона при переборе списка [using del]
Я столкнулся со следующей проблемой при попытке перебрать этот список. В списке удален один аргумент, но остановка итерации такая же. Я пытался добавить n-1
в конце кода, но это не имело никакого значения.
Я все еще новичок, поэтому любые объяснения или помощь будут действительно оценены.
string_intrare = [['Gheorghe', 'Gita', '8', '7', '5.5', '10'],
['Vuia', 'Vasile', '4', '10', '10', '10'],
['Andreescu', 'Andra', '9', '10', '9', '10'],
['Elenescu', 'Elena', '5', '5', '5', '5']]
n = 4
for i in range(0,n):
if (float(string_intrare[i][2]) < 5) or (float(string_intrare[i][3]) < 5) or (float(string_intrare[i][4]) < 5) or (float(string_intrare[i][5]) < 5):
del string_intrare[i]
print('List ' + str(i) + ' has been removed remove' + ' ===== Grade lower than 5')
Traceback (most recent call last):
File ".\note_bacalaureat.py", line 16, in <module>
if (float(string_intrare[i][2]) < 5) or (float(string_intrare[i][3]) < 5) or (float(string_intrare[i][4]) < 5) or (float(string_intrare[i][5]) < 5):
IndexError: list index out of range
1 ответ
Решение
Это происходит потому, что в случае, если условие "если" принимает значение "истина", один из элементов списка удаляется, и размер списка теперь уменьшается, но n остается прежним, а цикл for продолжает повторяться n раз.
Один из возможных способов заставить это работать:
string_intrare = [['Gheorghe', 'Gita', '8', '7', '5.5', '10'],['Vuia', 'Vasile', '4', '10', '10', '10'],['Andreescu', 'Andra', '9', '10', '9', '10'],['Elenescu', 'Elena', '5', '5', '5', '5']]
n = 4
for i in string_intrare:
if (float(i[2]) < 5) or (float(i[3]) < 5) or (float(i[4]) < 5) or (float(i[5]) < 5):
print('List ' ,i , ' has been removed remove' , ' ===== Grade lower than 5')
string_intrare.remove(i)