@Almaz_L

Как удалить цепочки отрицательных чисел?

В одномерном списке A=(a1, а2, ..., аn) удалить все цепочки отрицательных элементов,
расположенные между положительными
from random import randint

a = [randint(-100, 100)	for i in range(15)]
print("ДО:", a)

def func(lst):
    chain = False
    result = []
    cash = []
    for elem in lst:
        if elem > 0:
            chain = True
            cash.clear()
            result.append(elem)
        elif elem < 0:
            if chain:
                cash.append(elem)
            else:
                result.append(elem)
        elif elem == 0:
            result.extend(cash)
            chain = False
            result.append(elem)
    result.extend(cash)
    return result

print("ПОСЛЕ:", func(a))

Удаляется одно отрицательное число между положительными, а нужно удалять только цепочки от двух элементов
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
aRegius
@aRegius
Python Enthusiast
from itertools import groupby


def one_or_zero(num):
	   return 1 if num > 0 else 0

head, *body, tail = [(num, list(group)) for num, group in groupby(data, key=one_or_zero)]
new_data_body = [i for num, group in body for i in group if num or len(group) == 1]
new_data = head[-1] + new_data_body + tail[-1]


# data ->  [-53, -27, 89, -83, -39, 78, -45, 37, -10, -96, 83, 79, -84, -40, 63, -8, -8]
# new_data -> [-53, -27, 89, 78, -45, 37, 83, 79, 63, -8, -8]

# data ->  [89, -83, -39, 78, -45, 37, -10, -96, 83, 79, -84, -40, 63, -8, -9]
# new_data -> [89, 78, -45, 37, 83, 79, 63, -8, -9]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы