Вот, пожалуйста:
import math
d_list = [1, -6, 7, -10, 11, -12, 13, -15, 17, -18, 19, -20, 23, -24, 29, -30, 31]
J = []
skip = []
for i in range(0, len(d_list) - 1):
if i in skip:
continue
if d_list[i] < 0 < d_list[i+1]:
if math.fabs(d_list[i+1] / d_list[i]) >= 6/5:
J.append(d_list[i])
else:
skip.append(i+1)
else:
print(d_list[i])
J.append(d_list[i])
print(J)
Output:[1, -24,-29]
Проблема в том, что вы добавляете оба элемента вместо одного, и если элемент недействителен, вы должны пропустить его при следующей проверке, поскольку он уже не прошел условие. Например, у нас есть
A->B->C
Если произойдет сбой A-> B, вы должны удалить их оба, и ваш код пропустит A, а затем проверит, действительны ли они B-> C, поэтому вы добавляете их обоих, и не должны.
Надеюсь, это понятно, если вы хотите, я могу уточнить подробнее.
Edit:
Вы также можете сделать это, не пропуская список, просто используя значение bool:
import math
d_list = [1, -6, 7, -10, 11, -12, 13, -15, 17, -18, 19, -20, 23, -24, 29, -30, 31]
J = []
skip = False
for i in range(0, len(d_list) - 1):
if skip:
skip = False
continue
if d_list[i] < 0 < d_list[i+1]:
if math.fabs(d_list[i+1] / d_list[i]) >= 6/5:
J.append(d_list[i])
else:
skip =True
else:
print(d_list[i])
J.append(d_list[i])
print(J)
Output:[1, -24,-29]
Однако при первом подходе сохраняется информация, почему элемент был удален.