Si j'ai cette liste avec 10 éléments: 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
4 Réponses :
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])
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
@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.
C'est parce que l [-1] code> est égal à l [len (l) -1] code>,
De même l [-2] code> est égal à l [len (l) -2] code>
q strong>: pourquoi A fort>: 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 Votre liste p> a 10 éléments. Étant donné que l'index commence à 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 @ 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. P> p> l [10] code> renvoie un indexerror code>, mais l [-1] code> retourne 0 code>? 0 code>. P> 0 code>, le dernier élément sera à l'index 9 code>. Lorsque vous essayez d'accéder à votre liste à l'index 10 code>, Python jette à juste titre une exception code> indexerror index> pour vous indiquer qu'il n'est pas une valeur d'index valide et est hors limites. P> -1 code> indique l'élément dernier em> dans la liste, -2 code> le prochain entretien et etc. depuis le dernier élément de votre liste est 0 code>, voilà ce que l [-1] code> retourne. p>
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 p>
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.