我有一個事件 A 發生時間的時間戳串列,我想知道 A 發生時是否有特定時間(在一小時內)。
這是事件發生的時間串列。我格式化了一個新行來表示新的一天。從串列中我們可以看到,該事件可能會在每天早上 7:50 到早上 8:50 之間發生。這里的輸出應該是大約一個小時的范圍,因為 7:50 - 8:50 是包含最多事件的時間范圍,這應該是答案。如何使用 Python 找出該模式?
我嘗試四舍五入到最接近的時間,然后找到最常見的時間,但這給了我 7 am - 8 am 而不是 7:50 am - 8:50 am。對于這個問題,我假設事件 A 每天都會發生。
預期答案:7:50 - 8:50
為什么?計算一小時范圍可以涵蓋的時間戳數量:
- 8:30 - 9:30: 2
- 14:40 - 15:40:1
- 20:40 - 21:40: 1
- 8:40 - 9:40: 1
- 20:00 - 21:00 : 2
- 8:40 - 9:40: 1
- 8:20 - 9:20: 3
- 7:50 - 8:50: 4
import datetime
times = [datetime.time(8, 30), datetime.time(14, 40), datetime.time(20, 40),
datetime.time(8, 40), datetime.time(20, 00),
datetime.time(8, 20),
datetime.time(7, 50)]
uj5u.com熱心網友回復:
這應該作業
from datetime import time, datetime, date, timedelta
def count_events(times):
count = 0
for t in times:
delta = datetime.combine(date.min, t) - datetime.combine(date.min, times[0])
if delta < timedelta(hours=1):
count = 1
else:
break
return times[0], (datetime.combine(date.min, times[0]) timedelta(hours=1)).time(), count
# your events list
times = [time(8, 30), time(14, 40), time(20, 40),
time(8, 40), time(20, 00),
time(8, 20),
time(7, 50)]
# sort times list before counting
times.sort()
# count events in intervals
intervals = []
for index, time in enumerate(times):
intervals.append(count_events(times[index:]))
# find the interval with max events number
most_events = max(intervals, key=lambda item:item[2])
# print results
print('\n'.join(str(e) for e in intervals))
print(f'interval with max events is: {most_events}')
結果是
(datetime.time(7, 50), datetime.time(8, 50), 4)
(datetime.time(8, 20), datetime.time(9, 20), 3)
(datetime.time(8, 30), datetime.time(9, 30), 2)
(datetime.time(8, 40), datetime.time(9, 40), 1)
(datetime.time(14, 40), datetime.time(15, 40), 1)
(datetime.time(20, 0), datetime.time(21, 0), 2)
(datetime.time(20, 40), datetime.time(21, 40), 1)
interval with max events is: (datetime.time(7, 50), datetime.time(8, 50), 4)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/507684.html
