Поиск разницы между элементами большого списка
Коллеги, прошу совета. Дан список из float
. Список может быть большой - миллионы элементов. Мы берем каждый элемент списка и проверяем каждый следующий элемент на разницу между ними. Как только абсолютное значение разницы равно или превышает заранее заданную величину мы заводим флаг в специально подготовленный список, который показывает - получили мы положительную или отрицательную разницу либо мы достигли конца списка, но условия не достигли.
Очевидное, но "тупое" решение данной задачи:
float_list = [1.0, 2.0, 3.0, 6.0, 3.0, 1.0]
flag_list = []
lim = 2 # значение 0 невозможно
for i in range(len(float_list)-1):
for j in range(i+1, len(float_list)):
if abs(float_list[j]-float_list[i]) >= lim:
if float_list[j]-float_list[i] > 0:
flag_list.append(1)
else:
flag_list.append(-1)
break
else:
flag_list.append(0)
flag_list.append(0) # для последнего элемента условие никогда не выполнится
print(float_list)
print(flag_list)
Также я пытался применить map
, также пытался конвертировать в pandas.Series
и применять apply
. Все это - очень долго.
Отсюда вопрос - возможно, вы подскажете какое-то изящное решение, которое от меня ускользает, чтобы эта задача не превращалась в тупой перебор. Особенно, учитывая, что условие может не выполнится, а это значит, что мы вынуждены будем перелопачивать весь список до конца.
UPD. Из комментариев стало понятно, что есть ряд неясных моментов. Проясняю:
- Все входные данные положительные
- Входные данные хаотичны и могут повторяться
- Последовательность данных важна
- Конечной целью задачи является - присвоить каждому из элементов списка флаг с соответствующим знаком - нашли мы ПОСЛЕ текущего элемента, другой элемент, который отличается на lim в большую или меньшую сторону.
- Важно какая разница встретилась первой - положительная или отрицательная - в зависимости от знака первой разницы, соответствующей условию, мы выставляем положительный или отрицательный флаг.
Благодарю!