如果函数输入在指定范围内,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
所以我刚刚完成了我的 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