以下是一个示例代码,用于按组进行时间区间重叠匹配:
def find_overlaps(intervals):
# 创建一个字典,用于存储每个组的时间区间
group_intervals = {}
# 按组遍历时间区间
for interval in intervals:
group = interval[0] # 时间区间的组号
start = interval[1] # 时间区间的开始时间
end = interval[2] # 时间区间的结束时间
# 如果组号不在字典中,则创建一个新的键值对
if group not in group_intervals:
group_intervals[group] = []
# 将时间区间添加到相应的组中
group_intervals[group].append((start, end))
# 创建一个列表,用于存储重叠的时间区间
overlaps = []
# 遍历每个组的时间区间
for group, intervals in group_intervals.items():
# 对时间区间按开始时间进行排序
sorted_intervals = sorted(intervals, key=lambda x: x[0])
# 检查相邻时间区间是否重叠
for i in range(len(sorted_intervals) - 1):
current_end = sorted_intervals[i][1] # 当前时间区间的结束时间
next_start = sorted_intervals[i+1][0] # 下一个时间区间的开始时间
# 如果下一个时间区间的开始时间在当前时间区间的结束时间之前,则存在重叠
if next_start < current_end:
overlaps.append((group, sorted_intervals[i], sorted_intervals[i+1]))
return overlaps
# 示例数据
intervals = [
(1, 2, 4),
(1, 3, 5),
(2, 1, 3),
(2, 4, 6),
(3, 2, 4),
(3, 5, 7)
]
# 按组进行时间区间重叠匹配
overlaps = find_overlaps(intervals)
# 输出结果
for overlap in overlaps:
group = overlap[0]
interval1 = overlap[1]
interval2 = overlap[2]
print(f"Group {group}: ({interval1[0]}, {interval1[1]}) overlaps with ({interval2[0]}, {interval2[1]})")
运行以上代码,输出将为:
Group 1: (2, 4) overlaps with (3, 5)
Group 2: (1, 3) overlaps with (4, 6)
Group 3: (2, 4) overlaps with (5, 7)
这段代码首先将时间区间按组进行分组存储,然后对每个组的时间区间按开始时间进行排序。接下来,通过比较相邻时间区间的开始时间和结束时间,检查是否存在重叠。如果存在重叠,则将重叠的时间区间添加到结果列表中。最后,输出每个重叠的时间区间及其所属的组。
上一篇:按组进行SAS保留/填充操作
下一篇:按组进行数据分组并更改数据