...pourquoi foo[6:0:-1] n'imprime pas la liste entière ?
Parce que la valeur moyenne est la exclusif plutôt qu'une valeur limite inclusive. Le site notation des intervalles est [start, stop].
C'est exactement comme cela que fonctionne [x]range :
>>> range(6, 0, -1)
[6, 5, 4, 3, 2, 1]
Ce sont les indices qui sont inclus dans votre liste résultante, et ils n'incluent pas 0 pour le premier élément.
>>> range(6, -1, -1)
[6, 5, 4, 3, 2, 1, 0]
Une autre façon de voir les choses est :
>>> L = ['red', 'white', 'blue', 1, 2, 3]
>>> L[0:6:1]
['red', 'white', 'blue', 1, 2, 3]
>>> len(L)
6
>>> L[5]
3
>>> L[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
L'indice 6 est au-delà (à une unité près) des indices valides pour L, ce qui l'exclut de la plage comme valeur d'arrêt exclue :
>>> range(0, 6, 1)
[0, 1, 2, 3, 4, 5]
Vous obtenez toujours des indices pour chaque élément de la liste.
4 votes
Notez également le
foo[7:None:-1]
possibilité :)1 votes
Je n'ai jamais utilisé Python auparavant, j'essaie juste de comprendre la notation des tranches, ma question est de savoir pourquoi foo[6:0:-1] n'envoie pas d'erreur d'index, est-ce que Python ne s'en soucie pas ? parce que l'index 6 n'est pas disponible dans le tableau de l'exemple ci-dessus.
3 votes
@MubasharAhmad Le découpage n'est pas une indexation et ne génère pas d'erreur en cas de dépassement des limites. En revanche, l'indexation envoie une exception en cas de dépassement des limites.