在Python中将整数与数值范围匹配

时间:2016-01-20 19:47:17

标签: python-2.7 dictionary match

假设三个非重叠的整数数值范围( r1 r2 r3 )以及一个目标整数 i

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

什么函数会返回目标整数落在其范围内的字典键(即数值范围的名称)?

sought_function(i, ranges)
# "r2"

2 个答案:

答案 0 :(得分:2)

列表推导如何迭代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异常。您可以处理错误,如果在您的情况下有意义,则提供默认值

答案 1 :(得分:1)

如果范围可以重复/重叠

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

如果只能有一个或无

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

items为您提供与Python 3的兼容性......如果您需要它