在列表中查找非重叠块

时间:2014-06-30 08:49:56

标签: python list merge

我有一个清单: x = [[ 263 ,3121],[2201,4756],[3145,6423],[4765, 8165 ],[ 12480 ,18421],[18000, 24191 ],[ 26343 ,28105],[27341, 28912 ],[ 29497 30282 ]]

我想要一个包含合并重叠块的新列表(上面以粗体突出显示): y = [[263,8165],[12480,24191],[26343,28912],[29497,30282]]

即,浏览x列表并合并所有重叠列表以给出y。如果x中列表的下一项的第一项小于x中前一项的最后一项,则将两者合并并保存为y,否则不要将新的起始值作为y中的下一个项目。继续执行x直到所有重叠块合并并写入y。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可以像在文本中描述的那样记下代码。

def yield_data(data):
    start = None
    end = None
    for entry in sorted(data):
        if start is None:
            start = entry[0]
        if end is None or entry[0] < end:
            end = entry[1]
        else:
            yield [start, end]
            start, end = entry
    yield [start, end]


def main():
    x = [[263, 3121], [2201, 4756], [3145, 6423], [4765, 8165], [12480, 18421],
         [18000, 24191], [26343, 28105], [27341, 28912], [29497, 30282]]
    for group in yield_data(x):
        print(group)

if __name__ == '__main__':
    main()

None的比较用于初始化第一个循环中的数据。