从Python中的函数返回布尔值时出现意外结果



我正在尝试编写一个Pyhon函数,用于检查列表是否包含给定的索引号。

def ncheck(n, list):
for x in range(len(list)):
if n == x:
return True
else:
return False

我用以下参数测试了代码:

print(ncheck(6, [0, 1, 2, 3]))
print(ncheck(2, [0, 1, 2, 3]))

我期望第一次运行返回False,因为它在一个包含4个元素的列表中查找索引6,而第二次运行则返回True,因为它正在查找索引2。实际情况是两次运行都返回False。我认为if块中可能有return导致了问题,所以我尝试分配另一个变量";回答";在if块中,并将此变量作为函数的结束语句返回,但得到了相同的结果:

def ncheck(n, list):
for x in range(len(list)):
if n == x:
answer = True
else:
answer = False
return answer
print(ncheck(6, [0, 1, 2, 3]))
print(ncheck(2, [0, 1, 2, 3]))
False
False

我不知所措。除了解决这个问题的另一种方法外,我还想了解为什么这种方法不起作用。

您的代码当前只检查第一个数字,如果所有数字不匹配,则您的else将运行:

def ncheck(n, list):
for x in range(len(list)):
if n == x:
return True
return False # after exiting the for loop
print(ncheck(6, [0, 1, 2, 3]))
print(ncheck(2, [0, 1, 2, 3]))

返回

False
True

此外,请注意,range实际上能够作为O(1(运算来执行此操作,因此执行此操作的首选方式(与list的长度无关(为:

def ncheck(n, list):
return n in range(len(list))

您可以查看此答案以了解更多详细信息。

最新更新