-5

私は2つのリストを持っています、

[[1, 2], [4, 7], [11, 13], [15, 21]]

[[3, 4], [5,12], [23, 25]]

このような出力が必要です。

[[1, 2], [3,13], [15, 21], [23, 25]]

誰でも私を助けることができますか?

4

1 に答える 1

5

時間範囲が重複している時間範囲タプルのリストのマージのアルゴリズムは、それらを連結していれば、入力に対して完全に機能します。

def merge(times):
    saved = list(times[0])
    for st, en in sorted([sorted(t) for t in times]):
        if st <= saved[1]:
            saved[1] = max(saved[1], en)
        else:
            yield tuple(saved)
            saved[0] = st
            saved[1] = en
    yield tuple(saved)

lst1 = [[1, 2], [4, 7], [11, 13], [15, 21]]
lst2 = [[3, 4], [5,12], [23, 25]]

print list(merge(sorted(lst1 + lst2)))

出力:

[(1, 2), (3, 13), (15, 21), (23, 25)]
于 2012-09-17T10:14:45.680 に答える