如果函数输入在指定范围内,return True 或 False 的最有效方法? (效率问题)

Most efficient way to return True or False if a function input is within specified range? (Efficiency Problem)

所以我刚刚完成了我的 Python 课程的部分考试,给出的挑战问题之一是编写一个函数,如果函数输入在 100 中的 10 以内,则该函数将 return 为真或 200。

我想出了一个有效的函数,但是,我知道我缺少一些效率。

这是我最初尝试的功能:

def numfunc(a):
    range_list = list(range(90,111)) + list(range(190,211))
    for num in range_list:
        if a != num:
            continue
        elif a == num:
            return True
        else:
            return False

上面代码的问题是,如果数字在范围内,它会 return 为真,但是,如果不在范围内,它会 return 什么都没有。

我写的最终起作用的函数是这样的:

def numfunc(a):
    range_list = list(range(90,111)) + list(range(190,211))
    answer = []
    
    for num in range_list:
        if a == num:
            answer.append(True)
            
    if answer == [True]:
        return True
    
    if answer != [True]:
        return False

请记住,我使用的是我自己学习或在课程中学习过的功能。

所以如果有人能指出为什么第一段代码不是 returning False and/or 可以教我一个更有效的方法来完成同样的事情:我很乐意向你学习。

您可以使用链式比较在一个表达式中执行此操作:

def f(a):
    return 90<=a<=110 or 190<=a<=210

print(f(200))
print(f(90))
print(f(150))

结果:

True
True
False

如果你想检查一个数字 n 是否在 2 个数字的范围内,你应该使用 range 来检查它并返回 true 或 false。您正在做的是基于两个列表创建一个列表,而这些列表不是在创建一个从 90 到 211 的列表,而是在创建一个包含从 90 到 110 和 190 到 210 的数字的列表。

此外,如果您想检查列表中是否存在数字,只需使用:

if n in list:
   return True

这应该有效:

def numFunc(a):
        print(a in range(0,100))
    
numFunc(2)
numFunc(101)
numFunc(20)

输出:

True
False
True

原因是 if a != num: continue 可以防止数字不匹配时发生任何其他事情。循环将结束,函数将 return 默认值 None。

简单的解决方法是像这样编写循环:

for num in range_list:
    if == num:
        return True
return False

注意最后的 return 在循环之外。

但是从效率的角度来看,通过检查整数元素来测试范围内的包含是一个糟糕的主意。改为使用丰富的比较运算符:

def numfunc(a):
    return abs(a - 100) <= 10 or abs(a - 200) <= 10

不使用 abs 的等效表达式为

def numfunc(a):
    return -10 <= a - 100 <= 10 or -10 <= a - 200 <= 10