通过将先前对的第二个数字与下一对的第一个数字

时间:2015-06-07 09:47:27

标签: python list for-loop merge comparison

[[[0, 2], [2, 9]], [[3, 7], [7, 9], [9, 12], [15, 17]], [[4, 6]]]

我需要遍历列表对的这个子列表列表,并检查子列表中的下一对是否具有与前一对的第二个数字相同的第一个数字。如果是相同的,请合并。

所以它需要做的是合并[0, 2][2, 9]以获取[0, 9]并仅合并[3, 7],[7, 9],[9, 12]以获取[3, 12]但不要触及{ {1}},因此第二个子列表子列表最终将成为[15, 17] 最后主要列表变为:

[[3, 12], [15, 17]]

我该怎么做?我尝试了以下但是它不起作用:

[[[0, 9]], [[3, 12], [15, 17]], [[4, 6]]]

1 个答案:

答案 0 :(得分:0)

从上面的链接:

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 list(saved)
            saved[0] = st
            saved[1] = en
    yield list(saved)

>>>mylist = [[[0, 2], [2, 9]], [[3, 7], [7, 9], [9, 12], [15, 17]], [[4, 6]]]
>>>[list(merge(i)) for i in mylist]
[[[0, 9]], [[3, 12], [15, 17]], [[4, 6]]]