Python 如何组合最近的非重叠范围?
考虑以下范围数组:Python 如何组合最近的非重叠范围?,python,Python,考虑以下范围数组: a = [ [2665.189, 2805.362], [1304.812, 1429.328], [2859.97, 2913.514], [2931.631, 3597.11], [158.045, 172.058], [918.479, 929.199], [263.246, 264.146], [856.724, 860.121] ] 我想组合另一个范围相对于所考虑范围的最小值和最大值之差小于或等于3
a = [
[2665.189, 2805.362],
[1304.812, 1429.328],
[2859.97, 2913.514],
[2931.631, 3597.11],
[158.045, 172.058],
[918.479, 929.199],
[263.246, 264.146],
[856.724, 860.121]
]
我想组合另一个范围相对于所考虑范围的最小值和最大值之差小于或等于300
I,e的范围
[[2665.189, 2805.362],[2859.97, 2913.514],[2931.631, 3597.11]]
其中2859.97-2805.365=54.608
和2931.631-2913.514=18.117
之间的差异,所以现在它变成了一个单一范围[2665.1893597.11]
这样继续下去,最终结果应该是:
a = [
[158.045, 264.146],
[856.724, 929.199],
[1304.812, 1429.328],
[2665.189,3597.11]
]
如果有人能建议用python编写代码来实现这一点。这会有帮助吗?这里有一个解决方案,不是最优雅的,但很有效:
RANGE_LIMIT = 300
a = [[2665.189, 2805.362], [1304.812, 1429.328], [2859.97, 2913.514], [2931.631, 3597.11], [158.045, 172.058], [918.479, 929.199], [263.246, 264.146], [856.724, 860.121]]
a = sorted(a)
done = False
while not done:
done = True
for r in range(len(a)-1):
if a[r] == []: continue
if((a[r+1][0] - a[r][1]) < RANGE_LIMIT):
a[r] = [a[r][0], a[r+1][1]]
a[r+1] = []
done = False
a = [x for x in a if x]
print a
RANGE\u LIMIT=300
a=[[2665.1892805.362]、[1304.8121429.328]、[2859.972913.514]、[2931.6313597.11]、[158.045172.058]、[918.479929.199]、[263.246264.146]、[856.724860.121]]
a=已排序(a)
完成=错误
虽然没有这样做:
完成=正确
对于范围内的r(透镜(a)-1):
如果a[r]=[]:继续
如果((a[r+1][0]-a[r][1])
给你:
a = [[2665.189, 2805.362], [1304.812, 1429.328], [2859.97, 2913.514], [2931.631, 3597.11], [158.045, 172.058], [918.479, 929.199], [263.246, 264.146], [856.724, 860.121]]
sorted_a = sorted(a, key=lambda x: x[0])
output_a = [sorted_a[0]]
for idx, ele in enumerate(sorted_a[1:], 1):
if ele[0] - sorted_a[idx - 1][1] <= 300:
output_a[-1][1] = ele[1]
else:
output_a.append(ele)
范围是否可能重叠,或者它们是否总是不相交?您的代码在哪里?它到底有什么问题?@F.J范围始终不重叠
[[158.045, 264.146],
[856.724, 929.199],
[1304.812, 1429.328],
[2665.189, 3597.11]]