6
votes

Pourquoi Python retourne-t-il des indices de liste négative?

Si j'ai cette liste avec 10 éléments: xxx pré>

pourquoi l [10] renvoie une indexerror, mais L [-1] retourne 0? p>

>>> l[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[0]
1
>>> l[-1]
0
>>> l[-2]
9


1 commentaires

Qu'entendez-vous par «Aucun élément précédent dans la liste»? Si par "précédent", vous voulez dire "à gauche de l'élément actuel", la réponse de la Lattyware devrait être gentiment. Mais je ne peux pas m'empêcher de me demander si vous voulez dire autre chose.


4 Réponses :


21
votes

Dans Python, les indices de liste négative indiquent des éléments comptés à partir de la droite de la liste (c'est-à-dire l [-n] code> sténographie pour l [len (l) -n] ).dece, vous trouverez que vous avez besoin de indices négatifs pour indiquer une erreur, vous pouvez simplement vérifier ce cas et augmenter l'exception vous-même (ou le gérer puis et là): P>

index = get_some_index()
if index < 0:
    raise IndexError("negative list indices are considered out of range")
do_something(l[index])


2 commentaires

Pas tout à fait sûr que j'aime l'IndexError - mais au moins cela a maintenant un message. Je serais assez surpris si je ne pouvais pas obtenir le dernier élément en utilisant -1 quand je savoir c'est une liste intégrée ... plus la coupe étendue a besoin de travail sur elle ...


@Joncensements Je ne suggère pas de sous-classe, la liste ne veut donc pas Se comporter différemment, juste dans l'instance particulière où vous ne voulez pas que les indices négatifs soient possibles, traitez-les.



2
votes

C'est parce que l [-1] est égal à l [len (l) -1] , De même l [-2] est égal à l [len (l) -2] xxx


0 commentaires

1
votes

q : pourquoi l [10] renvoie un indexerror , mais l [-1] retourne 0 ?

A : Parce que les valeurs d'index en Python (comme dans de nombreuses autres langues) sont basées sur zéro. Cela signifie que le premier élément est stocké à index 0 .

Votre liste xxx

a 10 éléments. Étant donné que l'index commence à 0 , le dernier élément sera à l'index 9 . Lorsque vous essayez d'accéder à votre liste à l'index 10 , Python jette à juste titre une exception indexerror pour vous indiquer qu'il n'est pas une valeur d'index valide et est hors limites.

Python utilise également la convention de valeurs d'index négatives pour accéder aux éléments de la "fin" d'une liste ou d'une séquence. Valeur d'index -1 indique l'élément dernier dans la liste, -2 le prochain entretien et etc. depuis le dernier élément de votre liste est 0 , voilà ce que l [-1] retourne.

@ La réponse de Lattyware vous montre déjà comment générer / jeter une exception, j'espère Cela répond à votre question initiale.


0 commentaires

0
votes

Parce que, la valeur d'index commence à 0. Dans votre cas, la dernière valeur d'index est 9, plus de valeur d'index après 9. Lorsque vous essayez d'imprimer les valeurs au-delà de la limite de valeur d'index, elle doit lancer une erreur


0 commentaires