python, двумерный массив
Не могу понять в чем проблема.
У меня есть двумерный массив и мне нужно удалить из него те вложенные массивы если в них есть элемент 'inf'
arr = [[1, 2, 3], [3, 4, "inf"], [1, 10, 15]]
for i in range(len(arr)):
for j in range(len(arr[i])):
if arr[i][j] == `inf`:
del arr[i]
У меня выбивает ошибку List index out of range.
То есть результат должен быть таким:
Array = [[1,2,3], [1,10,15]]
Ответы (3 шт):
Лучше сделать так:
arr = list(filter(lambda x: 'inf' not in x, arr))
Потому, что когда Вы удаляете подсписок, длинна списка уменьшается, а кол-во проходов цикла - нет. И когда скрипт пытается взять arr[2], он получает ошибку, т.к. длинна списка уже 2, т.е. последний елемент будет под индексом 1.
Ошибка в том, что при начале цикла в списке 3 элемента и цикл программируется на 3 прохода, но в процессе выполнения из списка удаляется 1 элемент и остаётся только 2, поэтому при попытке достать arr[i] вылетает ошибка
Проще всего обойти список в обратном порядке
for j in range(len(arr[i])-1, -1, -1): #или reversed использовать
if arr[i][j] == `inf`:
del arr[i]