Пришло письмо с ответом, по какой-то причине здесь не разместилось.
Vindicar ответил на ваш вопрос Перебор массива на поиск серий. Что необходимо подправить в коде?
Я думаю, можно проще. Построй две карты массива: одна показывает, является ли элемент частью подходящей ненулевой последовательности, идущей вперёд, другая - назад.
Потом объедини их логическим ИЛИ, и получишь карту элементов, которые нужно оставить.
forward = [all(arr[i:i+N]) for i in range(len(arr)-N)] + [False]*N
print('FORWARD:', list(map(int, forward)))
back = [False]*(N-1) + [all(arr[i-N+1:i+1]) for i in range(N-1, len(arr))]
print(' BACK:', list(map(int, back)))
both = [f or b for f,b in zip(forward, back)]
print(' BOTH:', list(map(int, both)))
По карте both уже модифицировать массив сможешь, я думаю.
Спасибо за решение! Проверил его на исходном массиве: необходимые серии находятся. А модификация - не проблема.
Алан Гибизов, добрый день! Под "последовательностями" имел в виду ненулевые элементы, идущие один за другим. В данном примере последовательности - [7, 1] и [4, 2, 5, 4]. Элемент со значением 9 не называется последовательностью, поскольку в единичном экземпляре.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Спасибо за решение! Проверил его на исходном массиве: необходимые серии находятся. А модификация - не проблема.