我有一个起始值和结束值字典的列表:
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有什么想法?
答案 0 :(得分:2)
只需单独检查每个范围。范围内的值以及任何范围内的值都会自动处理。
9231332454834
9230374555790