我有一个清单: 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。
感谢您的帮助
答案 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
的比较用于初始化第一个循环中的数据。