将整数与 Python 中的数字范围匹配
Match integer to numeric range in Python
假设三个不重叠的整数数值范围(r1、r2 和 r3 ) 以及一个目标整数 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 兼容...如果您需要它
假设三个不重叠的整数数值范围(r1、r2 和 r3 ) 以及一个目标整数 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 兼容...如果您需要它