将整数与 Python 中的数字范围匹配

Match integer to numeric range in Python

假设三个不重叠的整数数值范围(r1r2r3 ) 以及一个目标整数 i.

i = 7
ranges = {"r1": [0,4], "r2": [5,8], "r3": [9,10]}

什么函数会 return 将目标整数落入其范围内的字典键(即数字范围的名称)?

sought_function(i, ranges)
# "r2"

遍历 dictionary items 并检查 i 是否在范围内的列表理解如何:

>>> i = 7
>>> ranges = {"r1": [0,4], "r2": [5,8], "r3": [9,10]}
>>> [key for key, (low, high) in ranges.iteritems() if low <= i <= high]
['r2']

使用 iteritems() 因为问题被标记为 Python-2.7.

如果您只需要第一个值,请使用 next():

>>> next(key for key, (low, high) in ranges.iteritems() if low <= i <= high)
'r2'

请注意,如果没有符合条件的值,您将得到 StopIteration 异常。您可以处理错误,或者提供一个 默认值 如果它对您的情况有意义。

如果范围可以是 repated/overlapping

iranges = [x for x, r in ranges.items() if r[0] <= i <= r[1]]

如果只能有一个或者None

irange = next((x for x, r in ranges.items() if r[0] <= i <= r[1]), None)

items 让您与 Python 3 兼容...如果您需要它