测试python浮动范围大小

时间:2018-09-10 18:37:30

标签: python-3.x

嘿,那里有StackOverflow!我希望有一个简单的问题,我想看看是否有更简单的方法可以解决此问题。所以我有一个数据结构,其中有一堆数字范围。这些范围是传感器之间的关系值。这是一个例子

data1 = {
    'sensor01': {'bucket': [1, 4], 'offline_count': 103},
    'sensor04': {'bucket': [1.19, 2.24], 'offline_count': 32},
    'sensor05': {'bucket': [3.19, 4.24], 'offline_count': 32},
    'sensor06': {'bucket': [-1.16, 4.25], 'offline_count': 161},
    'sensor07': {'bucket': [2.494331, 9.320493], 'offline_count': 203},
}

data2 = {
    'sensor01': {'bucket': [3, 5], 'offline_count': 103},
    'sensor04': {'bucket': [0.19, 1.25], 'offline_count': 32},
    'sensor05': {'bucket': [4.19, 5.24], 'offline_count': 32},
    'sensor06': {'bucket': [-2.16, 0.25], 'offline_count': 161},
    'sensor07': {'bucket': [12.272427, 18.69733], 'offline_count': 203},
}

传感器的值是或可以简单地表示为具有各种精度级别的浮点数。我的问题是我需要测试这些范围,以确定任何给定时间点的最小可能范围。在Python中,这或多或少以非常低效的方式来完成:

for k, v in data1.items():
    d1_range = range(int(data1[k]['bucket'][0] * 1000), int(data1[k]['bucket'][1]) * 1000)
    d2_range = range(int(data2[k]['bucket'][0] * 1000), int(data2[k]['bucket'][0]) * 1000)
    if len(d1_range) < len(d2_range):
        print("data1 range smaller")
    else:
        print("data2 range smaller")

这确实可行,但我想知道是否有更有效的方法来做到这一点。似乎要乘以浮点数,并在范围对象上使用len似乎需要大量处理。

谢谢!

1 个答案:

答案 0 :(得分:1)

使用最大值和最小值之差的绝对值来获取范围:

for k,v in data1.items():
  b1 = data1[k]['bucket']
  b2 = data2[k]['bucket']
  d1 = abs(b1[1] - b1[0])
  d2 = abs(b2[1] - b2[0])
  if d1 < d2:
    print("data1 range smaller")
  else:
    print("data2 range smaller")