Pythonic data processing? Should I use an iterator?
Firstly, a loopless solution (not actually tested)

big_gaps = np.diff(timestamps) &gt;= big_gap


As you did

front_gaps = np.logical_and.accumulate(big_gaps)


This produces an array which is True until the first False in big_gaps. 

end_gaps = np.logical_and.accumulate(big_gaps[::-1])[::-1]


We do the same thing again, but this time we apply on the reversed array.

big_gaps = np.logical_or(front_gaps, end_gaps)


Now that we have arrays for the front and end portions, combine them

n = np.sum(front_gaps), np.sum(end_gaps)


Take the sums of the gaps arrays, 1 = True, 0 = False to figure out the values for n

keep = np.logical_not(big_gaps)


Invert the logic to figure out which ones to keep

return timestamps[keep], values[keep]


Produce your actual values

A few comments on pieces of your code

@staticmethod
def _trimmed_ends(timestamps, values, big_gap = 60*60*24*7):


I'd make a constant: ONE_WEEK = 60*60*24*7, as I think it would make this clearer

big_gaps = (np.diff(timestamps) &gt;= big_gap)


You don't need those parens

n = (0, 0)


This is a tuple here, but you modify it later. That won't work.

And finally, no you shouldn't use an iterator, for the reasons you mention.