Python - выборочное сравнение значений внутри списка
Есть некий список [а]. Нужно чтобы в нем шла пошаговая проверка на a[i]>a[i-1]. При срабатывании условия значение a[i] добавляется в список d. Последующие выполнения условия a[i]>a[i-1] игнорируются (важно!). При срабатывании условия a[i]< a[i-1] значение a[i] добавляется в список d. Если после этого вновь срабатывает a[i]>a[i-1], то идет добавление в d и до конца списка. В чем-то напоминает условия для входа и выхода из биржевой сделки
В моем исполнении код возвращает исходный список, а должно получиться [2,1,2,3]
a=[1,2,3,4,5,6,1,1,2,3,4,5,3]
d=[]
for i in range(1,len(a)):
if a[i]>a[i-1]:
b=a[i]
elif a[i]>a[i-1]:
continue
if a[i]<a[i-1]:
b=a[i]
d.append(b)
print(d)
Ответы (2 шт):
a = [1, 2, 3, 4, 5, 6, 1, 1, 2, 3, 4, 5, 3]
d = []
perekl = 0
for i in range(1, len(a)):
if a[i] > a[i-1] and perekl == 2 or a[i] > a[i-1] and perekl == 0:
perekl = 3
d.append(a[i])
continue
if a[i] < a[i-1] and perekl == 3 or a[i] < a[i-1] and perekl == 0:
perekl = 2
d.append(a[i])
print(d)
Выше код, если мы ждем, что первое либо a[i] > a[i-1] либо a[i] < a[i-1] поэтому ставим perekl == 0, так как не знаем что сработает первым. Если же нужно чтобы первое срабатывание было именно a[i] > a[i-1], то смотрите код ниже.
a = [1, 2, 3, 4, 5, 6, 1, 1, 2, 3, 4, 5, 3]
d = []
perekl = 2
for i in range(1, len(a)):
if a[i] > a[i-1] and perekl == 2:
perekl = 3
d.append(a[i])
continue
if a[i] < a[i-1] and perekl == 3:
perekl = 2
d.append(a[i])
print(d)
Не разбирая логики, добавьте некий флаг, который будет обозначать в какой именно стадии вы находитесь и добавьте проверку на равенство членов
a=[1,2,3,4,5,6,1,1,2,3,4,5,3]
d=[]
up = True # флаг
for i in range(1,len(a)):
if a[i]>a[i-1] and up:
b=a[i]
up = False # после первого попадания, опускаете флаг
elif a[i]>a[i-1]:
continue
elif a[i] == a[i-1]:
continue
if a[i]<a[i-1]:
b=a[i]
up = True # при срабатывания противоположного условия, снова поднимаете флаг и тд
d.append(b)
print(d)
