Как вывести оставшиеся элементы массива после удаления определенного элемента
Что проверяют
Различаете ли вы удаление по значению и по индексу, изменение списка на месте и создание нового. Следом обычно спрашивают, что будет, если элемент встречается несколько раз или его нет вовсе, и какова сложность каждого способа.
Как отвечать
В Python под «массивом» почти всегда имеют в виду list, поэтому начните с уточнения условия: удалить первое вхождение, все вхождения или элемент на конкретной позиции. Дальше способы:
lst.remove(x): удаляет первое вхождение по значению, меняет список на месте и возвращаетNone. Если элемента нет, бросаетValueError;del lst[i]иlst.pop(i): удаление по индексу,popпри этом возвращает удалённое значение. С конца списка это O(1), из начала или середины O(n), потому что хвост сдвигается;- срез
lst[:i] + lst[i + 1:]: новый список без элемента на позицииi, исходный не меняется; - списковое включение
[v for v in lst if v != x]: убирает все вхождения за один проход O(n) и тоже возвращает новый список.
Вывести остаток можно через print(lst) или print(*lst), если нужны значения через пробел. Хорошо добавить, что при частых удалениях из начала лучше подходит collections.deque с popleft() за O(1), а в numpy есть np.delete, который всегда создаёт новый массив.
Покажите, что понимаете выбор: если исходный список нужен дальше или на него ссылаются другие переменные, создавайте новый; если список огромный и копия дорога, меняйте на месте.
Где спотыкаются
Удаляют элементы прямо в цикле for v in lst: с lst.remove(v) внутри. Итератор идёт по индексам, после каждого удаления список сдвигается, и соседний дубликат пропускается. Итерируйтесь по копии lst[:] или стройте новый список.
Пишут lst = lst.remove(x) и получают None вместо списка: методы, которые меняют список на месте, ничего не возвращают.
Вызывают remove без проверки и падают на отсутствующем значении. Нужна проверка if x in lst или try/except ValueError, и об этом стоит сказать раньше, чем спросит интервьюер.