我正在尝试编写一个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))
您可以查看此答案以了解更多详细信息。