def AdomsDeltas(il): if not il: return [] ol = [il[0] - il[0]] minOrMax = previous = il[0] lastSign = 0 for current in il[1:]: s = current - previous if s: s /= abs(s) if s != lastSign: minOrMax = previous lastSign = s previous = current ol.append(minOrMax - current) return ol print '\n\n--------' inputList = [int(x) for x in "1 1 1 1 2 3 4 5 4 3 2 1 0 -1 -2 -3 -3 -3 -3 -2 -1 0 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 0 0 0 0 0".split(' ')] print 'input', inputList print 'output', AdomsDeltas(inputList)