比较Python中列表的成员

时间:2016-09-04 18:48:29

标签: python

我正在写一个函数(很长的路)来测试我输入的数字是否在列表中。我不想使用' 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"

6 个答案:

答案 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;马上。如果我们还没有在循环结束时返回那么元素就不存在了。