我正在写一个函数(很长的路)来测试我输入的数字是否在列表中。我不想使用' in'功能。问题是为什么它只在我输入列表中的数字时才有效,当列表中没有数字时,我在行if x == a[i]:
中收到错误。
def is_member(x):
a = [1,5,3,9,4,100]
i = 0
found = False
while found == False:
if x == a[i]:
found = True
break
i += 1
if found == True:
return "True"
else:
return "False"
答案 0 :(得分:2)
如果列表中没有元素,那么i
会越来越大,直到变为i = len(a)
。此时a[i]
会引发IndexError
,因为您超出了列表大小。简单的解决方法是使用while i < len(a):
代替while found == false:
,因为无论如何都要打破x == a[i]
的循环。
答案 1 :(得分:2)
那是因为你超出了列表的范围。
您应该添加一项检查,以便在i > len(a)
时返回。
答案 2 :(得分:2)
你也可以使用for循环来避免索引错误,试试这个
def is_member(x):
a = [1,5,3,9,4,100]
for i in range(len(a)):
if x == a[i]:
return True
return False
答案 3 :(得分:1)
您需要添加if (i == len(a)-1): return False
的条件。
因为索引不能超过列表a
的长度。
答案 4 :(得分:1)
def is_member(x):
a = [1,5,3,9,4,100]
i = 0
found = False
while found == False:
if i >= len(a):
return False # end of list reached
if x == a[i]:
found = True
break
i += 1
if found == True:
return "True"
else:
return "False"
处理列表末尾,添加了一段代码
事实上,你没有像Found
这样的另一个变量,你可以用以下方式完成。
def is_member(x):
a = [1,5,3,9,4,100]
i = 0
while True:
if i >= len(a):
print 'test'
return False # end of list reached
if x == a[i]:
return True
i += 1
答案 5 :(得分:1)
尝试这样的事情:
def is_member(x):
a = [1,5,3,9,4,100]
for i in a:
if i == x:
return "True"
return "False"
这里我们迭代一个,如果有任何成员== x
我们返回&#34; True&#34;马上。如果我们还没有在循环结束时返回那么元素就不存在了。