用Python方式查找值在范围列表中的位置

时间:2019-03-06 00:26:11

标签: python list search range

我有一个起始值和结束值字典的列表:

a = [
      {'start': 1, 'end': 3},
      {'start': 5, 'end': 6},
      {'start': 8, 'end': 10}
    ]

保证列表按顺序排列,并且没有任何重叠。给定一个值,我需要找到它在列表中的位置。如果它在定义的范围之一内,则需要取回该值。否则,我需要依次输入下一个“开始”值。例如,给定b = 2,我将取回值2,因为它在第一个范围内。但是,给定值b = 7,我将得到8,因为它是从7开始的下一个范围的起始值。

我已经写了一些代码来做到这一点:

def where_in_range(v, val_ranges):
  # Check if v comes before all ranges
  if v < val_ranges[0]['start']:
    return val_ranges[0]['start']

  # Check if v is within one of the ranges
  for r in val_ranges:
    if v >= r['start'] and v <= r['end']:
      return v

  # Check if v is between ranges
  for i in range(0, len(val_ranges)-1):
    if v > val_ranges[i]['end'] and v < val_ranges[i+1]['start']:
      return val_ranges[i+1]['start']

  return None

但是它似乎不是Python的。我愿意使用轻量级的程序包,但是像熊猫这样重的东西已经消失了,因为它被嵌入在Django应用程序中。关于如何使它更具Pythonic有什么想法?

1 个答案:

答案 0 :(得分:2)

只需单独检查每个范围。范围内的值以及任何范围内的值都会自动处理。

9231332454834
9230374555790