Это не слишком сложная проблема, если вы не хотите использовать библиотеку, что-то вроде этого должно делать то, что вы хотите.В основном, когда вы перебираете данные, если вы переходите от восходящего к нисходящему, у вас есть максимум, а от нисходящего к восходящему у вас есть минимум.
def get_highs_and_lows(data):
prev = data[0]
high = []
low = []
asc = None
for value in data[1:]:
if not asc and value > prev:
asc = True
low.append(prev)
elif (asc is None or asc) and value < prev:
asc = False
high.append(prev)
prev = value
if asc:
high.append(data[-1])
else:
low.append(data[-1])
return (high, low)
>>> data = [0, 1, 2, 1, 0, -2, 0, 2, 4, 2, 6, 8, 4, 0, 2, 4]
>>> print str(get_highs_and_lows(data))
([2, 4, 8, 4], [0, -2, 2, 0])