检查范围内是否有值

时间:2014-05-21 08:47:16

标签: python range

配置变量range可能如下所示:

range="5" 

或:

range="1-5"

现在给出一个给定的参数:

level=3

如何检查level是否在range内或不在?


我知道我可以拆分range然后逐一比较它们,我只是想知道是否有更高效的pythonic方式。


目前的方法:

def check_range(rng,level):
    if not rng:
        return true;
    levels=rng.split('-')
    if len(levels) > 1:
        return level >= int(levels[0]) and level <=int(levels[1])
    else:
        return level==int(levels[0])


print check_range("0-10",4)
print check_range("5-10",4)
print check_range("5",4)
print check_range("4",4)

顺便说一下,每个请求都会调用一次此方法。

2 个答案:

答案 0 :(得分:2)

这是一种万无一失的做法,尽管效率不高:

from re import findall as f

r="5"

level=3

a = f(r'(\d+)?-?(\d+)', r)[0]

try:
    print int(a[0]) <= level <= int(a[1])
except (IndexError, ValueError):
    print 0 <= level <= int(a[1])

答案 1 :(得分:2)

如果是python,就像你说的那样,那个范围值需要拆分:

功能定义:

 def check(range, level):
      points = range.split('-');
      if len( points ) == 1 :
        //only 1 item in your range
        if  level == int( points[0] ) :
          return true;
      if len( points ) == 2 : 
        if level >= int( points[0]) && level <=int(points[1]):
          return true;
      return false;

调用您的函数:

level = 3;
range="5-1"
check( range, level );