Не удаляется 3 из массива

`

array = list(map(int, input().split()))

for i in range(len(array)):
    if array[i] == 3:
        del array[i]

print(array)

`

Я пытаюсь удалить все числа 3 из массива К примеру 1 2 3 5 3 4 2 3 Выведет 1 2 5 4 2 Но выдаёт ошибку выхода за границу массива, почему?


Ответы (3 шт):

Автор решения: Andrei

Ваш алгоритм уменьшает размер массива в процессе цикла и Вы это не учитываете в своём алгоритме. Попробуйте сделать вот так:

array = list(map(int, input().split()))


def del_num(arr, num):
  """
  Принимает массив arr и число num которое
  необходимо удалить с массива.
  Возвращает массив
  """
  result = []
    
  for item in arr:
    
    if item != num:
      result.append(item)
            
  return result
        
        
print(del_num(array, 3))
→ Ссылка
Автор решения: George

Можно сделать с помощью генератора списка + работать будет быстрее

array = [1, 2, 3, 4, 3, 3, 8]
array = [item for item in array if item != 3]
print(array)
→ Ссылка
Автор решения: Namerek
from itertools import compress
from random import randint

items = [randint(0, 9) for _ in range(20)]
print(items)

print(list(compress(items, map(lambda x: x != 3, items))))
# [9, 7, 3, 6, 6, 5, 3, 6, 5, 0, 2, 1, 7, 6, 7, 3, 7, 6, 7, 4]
# [9, 7, 6, 6, 5, 6, 5, 0, 2, 1, 7, 6, 7, 7, 6, 7, 4]
→ Ссылка