Hãy nói rằng hôm nay tôi làm việc 9:00-18:00, tôi có 3 cuộc hẹn:Python - Thuật toán tìm các khe thời gian
- 10:00 - 10:30
- 12:00 - 13: 00
- 15:30 - 17:10
tôi cần phải tìm một danh sách các khe thời gian có sẵn của 1 giờ trong ngày.
Dưới đây là danh sách mà tôi sẽ nhận được
- 09:00 - 10:00
- 10:30-11:30
- 13:00-14:00
- 14:00 - 15:00
Tôi đã triển khai thực hiện điều đó trong php và tôi đã cố gắng đặt nó vào python.
Đây là cố gắng của tôi:
def get_slots(areas, duration):
slots = []
for area in areas:
if area['start'] == area['end']:
continue
i = area['start']
while (i + duration) <= area['end']:
i += duration
slots.append({
'start': (i - duration),
'end': i,
})
return slots
def get_areas(day_start, day_end, appts):
areas = []
old_end = day_start
for appt in appts:
if appt['start'] > old_end:
areas.append({
'start': old_end,
'end': appt['start'],
})
old_end = appt['end']
if old_end > day_end:
return areas
areas.append({
'start': old_end,
'end': day_end,
})
return areas
Test:
>>> day_start = datetime.datetime(2012, 5, 22, 9)
>>> day_end = datetime.datetime(2012, 5, 22, 18)
>>> appts = [{
'start': datetime.datetime(2012, 5, 22, 10),
'end': datetime.datetime(2012, 5, 22, 10, 30),
},{
'start': datetime.datetime(2012, 5, 22, 12),
'end': datetime.datetime(2012, 5, 22, 13),
},{
'start': datetime.datetime(2012, 5, 22, 15, 30),
'end': datetime.datetime(2012, 5, 22, 17, 10),
},]
>>> duration = datetime.timedelta(hours=1)
>>> pprint.pprint(get_slots(get_areas(day_start, day_end, appts), duration))
Nó hoạt động, nhưng tôi chỉ đơn giản là chuyển mã từ php.
Vì vậy, tôi không chắc đó là một cách để làm điều đó.
Bạn có thể chỉ cho tôi nơi tôi có thể cải thiện không?
Nếu khoảng thời gian từ 11: 00-12: 00 cũng được xem xét? –
Không, nó chỉ nhận được các khối thời gian tuần tự từ mỗi "khu vực" bắt đầu –