2011-06-11 3 views
2

J'ai écrit un programme qui vérifie que chaque cookie a plus de 5 jetons avant de continuer. Cependant, la ligne if cookie[i] > 5: semble être problématique, car elle produit une erreur de type "list index out of range". Je pensais foo = [] créé une liste sans fin, donc je ne comprends pas pourquoi un numéro serait hors de portée dans cette liste. Qu'est-ce que je fais mal?Index de liste hors plage

cookie = [] 

... 

for i in range(0, 11): 
    if cookie[i] > 5: 
     break 

Répondre

5

Essayez:

len(cookie) 

Vous verrez si vous ne l'avez pas mis quelque chose dans ce qu'il » Avec cookie = [], vous pouvez ajouter en continu des éléments à la liste, mais elle est initialisée vide.

+2

Certainement pas stupide. C'est comme ça que tu apprends une langue. – silent1mezzo

1

foo = [] crée un vide liste, pas une liste sans fin. Tout accès à un index échouera sur une liste vide. Pour vérifier la longueur d'une liste, utilisez len(mylist). La longueur d'une liste vide est 0 et les index sont basés sur zéro. Alors:

cookie = [] 
len(cookie) == 0 
cookie[0] ## will raise IndexError 

cookie.append('something') 
len(cookie) == 1 
cookie[0] ## will return 'something' 

Voir la list docs

1

cookie = [] crée une liste vide sans données, donc pas d'index ici. Vous devez d'abord remplir cookie avec quelques données (par exemple en utilisant cookie.append(some_data)).

1

foo=[] ne crée pas de liste sans fin. Au lieu de cela, il crée une liste vide.

Vous pouvez faire

for i in range(0, len(foo)): 
    if(cookie[i]>5): 
     break 

Ou vous pourriez faire

for c in cookie: 
    if c>5: 
     break 
2

Que diriez-vous:

cookies = [] 

... 

for cookie in cookies: 
    if cookie > 5: 
     break 
2

Vous ne pouvez pas vraiment avoir une liste sans fin qui dans votre cas a sans doute que des zéros en elle.

Vous pouvez cependant créer une liste avec 11 zéros:

cookies = [0] * 11 

Ou créer quelque chose qui retourne 0 si vous y accédez à un index si vous ne l'avez pas mis autre chose là-dedans:

import collections 
cookies = collections.defaultdict(int) 

Notez qu'il ne s'agit pas d'une liste mais d'une carte.

Questions connexes