我正在尝试优化一个在Python中合并重叠区间的函数。给定一个区间列表,其中每个区间表示为一个元组(起始,结束),我需要合并所有重叠的区间,并返回一个覆盖输入列表中所有区间的非重叠区间列表。
例如,给定输入列表intervals = [(1, 3), (2, 6), (8, 10), (15, 18)],输出应为[(1, 6), (8, 10), (15, 18)]。
这是我尝试的方法:
这个函数似乎工作正常,但我不确定它是否是最高效的方式或者最符合Python风格的方式。我期望能找到一个内置函数或者更直接的方法来实现这个功能,可能使用Python标准库。
问题:在Python中是否有更高效或更符合惯用法的方式来合并区间,也许可以使用一个库函数或者不同的算法来提高性能,特别是在处理大量区间时?
例如,给定输入列表intervals = [(1, 3), (2, 6), (8, 10), (15, 18)],输出应为[(1, 6), (8, 10), (15, 18)]。
这是我尝试的方法:
def merge_intervals(intervals):
sorted_by_lower_bound = sorted(intervals, key=lambda x: x[0])
merged = []
for higher in sorted_by_lower_bound:
if not merged or merged[-1][1] < higher[0]:
merged.append(higher)
else:
merged[-1] = (merged[-1][0], max(merged[-1][1], higher[1]))
return merged
print(merge_intervals([(1, 3), (2, 6), (8, 10), (15, 18)]))
这个函数似乎工作正常,但我不确定它是否是最高效的方式或者最符合Python风格的方式。我期望能找到一个内置函数或者更直接的方法来实现这个功能,可能使用Python标准库。
问题:在Python中是否有更高效或更符合惯用法的方式来合并区间,也许可以使用一个库函数或者不同的算法来提高性能,特别是在处理大量区间时?
lambda
,按第一个元素排序是默认的。 - undefinednumba
包来完成相同的工作,但是使用编译后的代码,速度更快。