iRobot СПб

Как из массива удалить первые три отрицательные элемента?

При работе с массивами иногда возникает необходимость удалить из них первые несколько элементов, соответствующих определенному критерию. Например, бывает нужно удалить первые три отрицательных элемента.

Решить эту задачу можно несколькими способами, рассмотрим два наиболее распространенных:

Способ 1

Первый способ заключается в использовании цикла for и условного оператора if.

a = [10, -5, -2, 3, -4, 8, -6, 7, 9]
count = 0 # счетчик отрицательных элементов

for i in range(len(a)):
    if a[i] < 0:
        count += 1
        if count == 3:
            a = a[i+1:]
            break

Для начала создаем счетчик count, который будем использовать для подсчета отрицательных элементов. Затем перебираем все элементы массива a в цикле for. Если элемент отрицательный, увеличиваем счетчик на 1. Если счетчик достигает значения 3, значит мы нашли все необходимые отрицательные элементы, и можем выйти из цикла, обрезав исходный массив.

Способ 2

Второй способ заключается в использовании генератора списков (list comprehension).

a = [10, -5, -2, 3, -4, 8, -6, 7, 9]
count = 0 # счетчик отрицательных элементов

a = [a[i] for i in range(len(a)) if a[i] >= 0 or (a[i] < 0 and  count >= 3)]

Сначала создаем счетчик count, затем используем генератор списков для создания нового массива a. В генераторе мы перебираем все элементы массива a, и добавляем в новый массив лишь те элементы, которые больше или равны нулю, или являются отрицательными, но не являются первыми тремя отрицательными элементами.

Оба способа решают задачу удаления первых трех отрицательных элементов из массива. Применение того или иного способа зависит от конкретной задачи и личных предпочтений разработчика.