先給出我的答案:
def findmax(timestrs, timeframe):
fmt = "%Y-%m-%d %H:%M:%S"
times = [datetime.strptime(timestr, fmt) for timestr in timestrs]
frame = timedelta(seconds=timeframe)
window = dict(bidx=0, eidx=0)
maxwindow = dict(bidx=0, eidx=0)
# search
for idx, time in enumerate(times):
if time-times[window['bidx']] > frame:
count = window['eidx'] - window['bidx'] + 1
if count > maxwindow['eidx'] - maxwindow['bidx']:
maxwindow = dict(window)
while time-times[window['bidx']] > frame:
window['bidx'] += 1
window['eidx'] = idx
else:
count = window['eidx'] - window['bidx'] + 1
if count > maxwindow['eidx'] - maxwindow['bidx']:
maxwindow = dict(window)
# output results
maxcount = maxwindow['eidx'] - maxwindow['bidx'] + 1
print('max count:{} of winodw from {}:{} to {}:{}'.format(
maxcount, maxwindow['bidx'], timestrs[maxwindow['bidx']],
maxwindow['eidx'], timestrs[maxwindow['eidx']]))