У меня есть список чисел. Я хочу извлечь из списка серии чисел, которые попадают в какую-то полосу и имеют некоторую минимальную длину. Например, предположим, что я хочу работать с этим списком:
thisList = {-1.2, -1.8, 1.5, -0.6, -0.8, -0.1, 1.4, -0.3, -0.1, -0.7}
с band = 1
и runLength = 3
. Хотелось бы получить
{{-0.6, -0.8, -0.1}, {-0.3, -0.1, -0.7}}
в результате. Сейчас я использую
Cases[
Partition[thisList,runLength,1],
x_ /; Abs[Max[x] - Min[x]] < band
]
. Основная проблема в том, что там, где прогоны перекрываются, я получаю много копий прогона. Например, использование
thisList = {-1.2, -1.8, 1.5, -0.6, -0.8, -0.1, -0.5, -0.3, -0.1, -0.7}
дает мне
{{-0.6, -0.8, -0.1}, {-0.8, -0.1, -0.5}, {-0.1, -0.5, -0.3}, {-0.5, -0.3, -0.1}, {-0.3, -0.1, -0.7}}
, где я бы предпочел
{-0.6, -0.8, -0.1, -0.5, -0.3, -0.1, -0.7}
, не выполняя произвольного сокращения перекрывающегося результата. Какой правильный путь? Было бы неплохо, если бы при этом не использовалось разбиение данных с помощью Partition
.