[EMAIL PROTECTED] wrote: > If this is the list. > > values = [ 0, 72, 0, 4, 9, 2, 0, 0, 42, 26, 0, 282, > 23, 0, 101, 0, 0, 0, 0, 0] > > as we can see there are peaks in the list.that is 0,72,0 is a > group(triangle) with peak 72.then 0, 4, 9, 2, 0, 0 with peak > 9 and 0, 42, 26, 0 with 42 and so on... > what I want is the left and right bound index of each bin(triangle).The > list could as big as possible.So some heurestic algorithm which could > first find max in the list and look for local maxima and minima and > group its adjcent bounds.Then find next max and group the bins and so > on. > > so that we can get > > [[0,2],[2,7],[7,10],[10,13]] > ( indexes of the bounds in the values list). so first group [0,2] > correspond to 0,72,0 in the values list and so on... > Hope I am clear.
ISTM you just have to look for the valleys - places where the values change from descending to ascending. Here is a simple-minded way to do it: def findPeaks(values): groups = [] startIx = 0 lastValue = values[0] ascending = True for i, value in enumerate(values[1:]): if value <= lastValue: ascending = False else: if not ascending: # Switch from descending to ascending groups.append( [startIx, i] ) startIx = i ascending = True lastValue = value # Get the last group if any if i > startIx: groups.append( [startIx, i] ) return groups values = [ 0, 72, 2, 4, 9, 2, 0, 0, 42, 26, 0, 282, 23, 0, 101, 0, 0, 0, 0, 0] print findPeaks(values) ## prints: [[0, 2], [2, 7], [7, 10], [10, 13], [13, 18]] Kent -- http://mail.python.org/mailman/listinfo/python-list