比较Python中列表的成员

比较Python中列表的成员,python,Python,我正在编写一个函数(很长的一段路)来测试我输入的数字是否在列表中。我不想使用“in”函数。问题是,为什么它只在我输入列表中的数字时起作用,而当某个数字不在列表中时,如果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

我正在编写一个函数(很长的一段路)来测试我输入的数字是否在列表中。我不想使用“in”函数。问题是,为什么它只在我输入列表中的数字时起作用,而当某个数字不在列表中时,如果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"

如果列表中没有元素,那么您的
i
会越来越大,直到它变成
i=len(a)
。此时,
a[i]
抛出一个
索引器,因为您超出了列表大小。简单的解决方法是在i
时使用
,而不是在found==false:
时使用
,因为您在
x==a[i]
处中断了循环。

您需要添加一个条件
if(i==len(a)-1):返回false

因为索引不能超过列表
a

的长度,这是因为您超出了列表的范围

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"
您应该添加一张支票,以便在
i>len(a)
时返回

为了处理列表的结尾,添加了一段代码

事实上,您不需要找到另一个变量,比如
,您可以用下面的方法来完成

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

请尝试以下方法:

def is_member(x):
    a = [1,5,3,9,4,100]
    for i in a:
        if i == x:
            return "True"
    return "False"

这里我们迭代a,如果有任何成员
==x
,我们立即返回“True”。如果我们在循环结束时还没有返回,则元素不存在。

您也可以使用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

这是因为当您在while循环中时,不会检查
i
的索引。因此
x==a[i]
也会在索引i不存在时检查元素
a[i]
,您会问“为什么我会出错?”。您没有读到错误消息:“IndexError:列表索引超出范围”吗?