我的问题如下:
有间隔列表的文件:
1 5
2 8
9 12
20 30
以及一系列
0 200
我想做这样一个交集,它将报告给定范围内间隔之间的位置[开始-结束]。
例如:
8 9
12 20
30 200
除了如何理解这一点之外,阅读一些关于优化的想法也很好,因为输入文件总是很大的。
最佳答案
只要间隔是按起点排序的,并且不需要创建与总范围一样大的列表,此解决方案就可以工作。
代码
with open("0.txt") as f:
t=[x.rstrip("\n").split("\t") for x in f.readlines()]
intervals=[(int(x[0]),int(x[1])) for x in t]
def find_ints(intervals, mn, mx):
next_start = mn
for x in intervals:
if next_start < x[0]:
yield next_start,x[0]
next_start = x[1]
elif next_start < x[1]:
next_start = x[1]
if next_start < mx:
yield next_start, mx
print list(find_ints(intervals, 0, 200))
输出:
(以你举的例子为例)
[(0, 1), (8, 9), (12, 20), (30, 200)]