考虑以下范围数组:
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]
]我想将另一范围相对于所考虑的范围的差b/w最小和最大值小于或等于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.189, 3597.11]
因此,继续这样下去,最终的结果应该是:
a = [
[158.045, 264.146],
[856.724, 929.199],
[1304.812, 1429.328],
[2665.189,3597.11]
]如果有人可以建议用python中的代码来实现这一点。会有帮助吗?
发布于 2014-04-11 07:38:21
给你:
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)output_a现在有:
[[158.045, 264.146],
[856.724, 929.199],
[1304.812, 1429.328],
[2665.189, 3597.11]]发布于 2014-04-11 07:37:36
这里有一个解决方案,不是最优雅的,而是有效的:
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 ahttps://stackoverflow.com/questions/23006053
复制相似问题