IndexError:列表索引超出范围为什么?

时间:2014-12-12 14:14:28

标签: python algorithm sorting search indexoutofrangeexception

我知道这个问题已被回答了很多次,但我无法弄清楚我的问题在哪里。这是我的代码:

from random import*

def VerificationLongue():

    x=randint(0,1000)
    liste=CreerListe()
    Check=0
    i=0

    while i<=len(liste):
        if x==liste[i]:
            Check=Check+1
        i=i+1

    print("X est dans la liste",Check," fois")

def CreerListe(): 
    ListeAleatoire=[]
    for i in range (0,100):
        valeur=randint(0,1000)
        ListeAleatoire.append(valeur)
    return (ListeAleatoire)


VerificationLongue()

这是一个简单的算法,用于查找数字是否在随机数列表中。我知道有&#39;计数&#39;或&#39;在&#39;但这是针对学校的,他们不希望我们使用它们。所以我得到了错误:

line 11, in VerificationLongue
    if x==liste[i]:
IndexError: list index out of range

我不知道为什么会出现此错误,因为它已初始化为0。

3 个答案:

答案 0 :(得分:3)

您已获得i<=len(liste),但您的列表的最后一个元素将出现在索引len(liste)-1,这意味着您将获得IndexError

您可以将其替换为i < len(liste)

来解决此问题

答案 1 :(得分:0)

下面:

while i<=len(liste):

i可以等于len(liste)。它不应该。您必须使用i<len(liste)

>>> l = range(5)
>>> l
[0, 1, 2, 3, 4]
>>> len(l)
5
>>> l[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[4]
4

旁注:你可以使用理解来做你的while循环:

>>> liste = [randrange(10) for _ in xrange(20)]
>>> liste
[4, 4, 0, 7, 6, 6, 2, 9, 8, 1, 4, 7, 2, 4, 1, 4, 7, 4, 0, 2]
>>> x=randint(0,10)
>>> x
4
>>> sum(x == i for i in liste)
6

但是列表也有count方法:

>>> liste.count(x)
6

答案 2 :(得分:0)

您需要做的只是循环中的print i,并且您可以轻松了解其发生的原因。

您的循环应该是i < len(liste)而不是<=。列表从零开始索引,因此如果您有100个项目,则编号为0-99。通过提升<=,您将从0到100,而liste[100]不存在。