Python检查字典列表中时间区间是否重叠的思路验证
时间区间重叠检查的思路验证
你的思路完全正确,核心逻辑没问题:
- 先按
start值排序是关键操作:排序后每个区间的起始时间都不会早于前一个区间,此时只需要检查相邻区间的重叠情况,就能判断整个列表里是否存在重叠区间。 - 比较逻辑也没问题:只要前一个区间的
end时间晚于后一个区间的start时间,就说明这两个区间存在重叠。
不过你的代码可以做些优化,提升效率和实用性:
- 避免重复解析时间:每次循环都调用
datetime.strptime会重复处理相同的时间字符串,建议先把所有时间转成datetime.time对象再排序比较。 - 增加最终判断逻辑:原代码只是打印单次比较结果,没有返回“是否存在重叠”的结论,可以改成直接输出最终判断。
优化后的代码示例:
from datetime import datetime # 原始时间区间列表 slots = [{'end': '19:00', 'start': '10:00'}, {'end': '23:00', 'start': '12:15'}, {'end': '12:00', 'start': '09:15'}] # 定义时间解析函数 def parse_time(time_str): return datetime.strptime(time_str, '%H:%M').time() # 按起始时间排序 sorted_slots = sorted(slots, key=lambda x: parse_time(x['start'])) # 检查是否存在重叠 has_overlap = False for elem, next_elem in zip(sorted_slots, sorted_slots[1:]): if parse_time(elem['end']) > parse_time(next_elem['start']): has_overlap = True break # 找到重叠后直接终止循环 print(f"是否存在时间区间重叠: {has_overlap}")
内容的提问来源于stack exchange,提问作者Russell
相关产品推荐
相关产品推荐

