Pop index out of range
N=8
f,g=4,7
indexList = range(N)
print indexList
print f, g
indexList.pop(f)
indexList.pop(g)
Dans ce code j'obtiens un message d'erreur indiquant que le menu d'index de g
dans indexList
est hors de portée.
Voici le résultat:
[0, 1, 2, 3, 4, 5, 6, 7]
4 7
Traceback (most recent call last):
indexList.pop(g)
IndexError: pop index out of range
Je ne comprends pas, g
a une valeur de 7, la liste contient les 7 valeurs, pourquoi n'est-il pas capable de me rendre le 7 dans la liste?
OriginalL'auteur Sean | 2012-08-29
Vous devez vous connecter pour publier un commentaire.
Pour obtenir la valeur finale d'une liste pop ed, vous pouvez le faire de cette façon:
Gardez à l'esprit que pop supprime l'élément, et la liste des changements de la longueur après le pop. Utiliser des nombres négatifs à l'index à partir de la fin d'une liste qui peut changer de taille, ou tout simplement utiliser le protocole pop() sans arguments pour la fin de l'élément.
Depuis un pop peut produire ces erreurs, vous voyez souvent dans un bloc d'exception:
OriginalL'auteur the wolf
Après vous pop le 4, la liste a seulement 7 valeurs. Si vous
print indexList
après votrepop(f)
, il ressemblera à:Après cette modification, cela ne veut pas répondre à la question (le demandeur sait que la liste contient 7 valeurs, et il le dit explicitement).
OriginalL'auteur Karl Bielefeldt
Avec toutes les autres réponses, la partie importante sur le
pop()
fonction est qu'elle supprime la valeur de la matrice, et donc de changer l'index. Après avoir mis de l'indice 4, votre liste est à gauche avec 7 points. Il est important de savoir que Python index commençant à 0 de sorte que votre 7 de l'élément de la liste contient uniquement les indices de 0 à 6. C'est pourquoi popping index 7 est en dehors des limites, il n'existe plus.Généralement un "pop" de la fonction est utilisée lors de la mise en œuvre d'un pile ou un la file d'attente où le but est d'obtenir une valeur à partir d'une liste de valeurs en attente de traitement. Pour éviter les traitement deux fois les mêmes données par accident, vous vous assurez de l'enlever en même temps que la récupération.
Parfois, les piles et les files d'attente peuvent être mis en œuvre avec un
peek
opération qui sera de retour juste la valeur sans le retirer mais depuis Python met en œuvre les piles et les files d'attente juste à l'aide de tableaux réguliers, sans emballage, votre œil fonction serait la normearray[index]
appel.----EDIT----
Il me semble que cela pourrait être le cas, au lieu de supprimer l'élément à indice 7, vous souhaitez supprimer le valeur 7. Si c'est le cas, vous devez appeler
indexList.remove(7)
. Cela permettra de supprimer la première occurrence de7
dans votre liste, quelle que soit son indice (et renvoie une erreur si aucune valeur n'est7
). Je suis sûr que vous comprenez quepop()
prend un indice, cependant.Juste au cas où, jetez un oeil à le Python structures de données de l'API pour plus d'informations sur les fonctions disponibles, ce qu'ils font, et quels sont les arguments qu'ils prennent.
indexList
a 7 éléments ("la liste contient 7 valeurs")J'ai fait examiner ce point avec mon "indexé de 0 à 6" de commentaires, mais vous avez un point que je n'ai pas de stress jamais assez sur ce point. J'ai editted ma réponse en conséquence.
OriginalL'auteur acattle