如何以增加间隔的大小的越来越多的顺序打印非交流间隔


def mergeoverlapping(initialranges):
    i = sorted(set([tuple(sorted(x)) for x in initialranges]))
    f = [i[0]]
    for c, d in i[1:]:
        a, b = f[-1]
        if c<=b<d:
            f[-1] = a, d
        elif b<c<d:
            f.append((c,d))
        else:
            pass
    return f
def main():
    #open file for reading
    list_of_Tups = []
    with open("intervals.txt") as in_file:
        for line in in_file:
            int_list = [int(i) for i in line.split()]
            line = int_list
            list_of_Tups.append(line)
            list_of_Tups.sort()
    answer = list(mergeoverlapping(list_of_Tups))
    print("Non-intersecting Intervals:")
    for i in range (len(answer)):
        print(answer[i])
main()

给定数据文件,我必须创建元组,将元组存储在列表中,对列表进行排序并用一个元组替换每对重叠的元组。

,但现在我想知道如何按时间尺寸的增加顺序打印非相互作用的间隔。如果两个间隔的大小相同,则按照其下端的升序打印两个间隔。因此,输出看起来像:

非交流间隔:(-4,3((4,7((10,15(

按大小顺序进行非相互作用间隔:(4,7((10,15((-4,3(

给定:

intervals = [(-25, -14), (-10, -3), (2, 6), (12, 18), (22, 30)]

然后,就像您已经在排序一样,您只需根据大小进行排序。

# First sort in ascending order in relation to lower
intervals.sort(key=lambda interval: interval[0])
# Then sort in ascending order in relation to size
intervals.sort(key=lambda interval: abs(interval[0] - interval[1]))

然后print(intervals)输出:

[(2, 6), (12, 18), (-10, -3), (22, 30), (-25, -14)]

因此,给出了(-4, 3), (4, 7), (-2, 1),然后导致(-2, 1), (4, 7), (-4, 3)(大小为3, 3, 7(。因此,它根据较低的大小正确对其进行正确分类。

最新更新