我想这就是你想要的。它遍历列表,计算每个条目与上一个条目之间的差异。如果差异大于或等于30分钟,它将忽略它。如果少于30分钟,则会将其添加到该用户的总使用量中。(我假设所有时间戳都是针对同一用户的。)
from datetime import datetime,timedelta
# Convert the timestamps to datetime objects
usetimes = sorted(datetime.strptime(d, '%Y-%m-%d %H:%M:%s') for d in timestamp)
# Set the idle time to compare with later
idletime = timedelta(minutes = 30)
# Start the running total with a timedelta of 0
usage = timedelta()
last = usetimes[0]
for d in usetimes[1:]:
delta = d - last
if delta < idletime:
usage += delta
last = d
print "total usage:",usage
如果您想使用sum()并且zip()可以减少代码行,但是我不确定它是否可读:
from datetime import datetime,timedelta
usetimes = sorted(datetime.strptime(d, '%Y-%m-%d %H:%M:%s') for d in timestamp)
idletime = timedelta(minutes = 30)
usage = sum((x - y for x,y in zip(usetimes[1:],usetimes[:-1]) if x - y < idletime),timedelta())
print "total usage:", usage
在这种情况下,如果时间戳列表很长,您可以考虑使用izipfromitertools
代替zip
。