dans l'exemple suivant:
foo = ['red', 'white', 'blue', 1, 2, 3]
où: foo[0:6:1]
affichera tous les éléments dans foo. Toutefois, foo[6:0:-1]
omettra le 1er ou le 0e élément.
>>> foo[6:0:-1]
[3, 2, 1, 'blue', 'white']
Je comprends que je peux utiliser foo.reverse () ou foo [:: - 1] pour imprimer la liste à l'envers, mais j'essaie de comprendre pourquoi foo [6: 0: -1] n'imprime pas la liste entière ?
Notation de tranche en bref:
[ <first element to include> : <first element to exclude> : <step> ]
Si vous souhaitez inclure le premier élément lors de l'inversion d'une liste, laissez l'élément du milieu vide, comme ceci:
foo[::-1]
Vous pouvez également trouver de bonnes informations sur les tranches Python en général ici:
Expliquer la notation de tranche de Python
Si vous avez du mal à vous souvenir de la notation des tranches, vous pouvez essayer de faire Hokey Cokey :
[ Entrée : Sortie : Secouez tout ]
[Premier élément à dans clude: Premier élément à exclure : Le étape à utiliser]
YMMV
... pourquoi foo [6: 0: -1] n'imprime pas la liste entière?
Parce que la valeur intermédiaire est la valeur d'arrêt exclusive , plutôt qu'inclusive. notation d'intervalle est [start, stop).
Voici comment fonctionne la plage [x]:
>>> 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à (un seul, précisément) des indices valides pour L, l'excluant ainsi de la plage comme valeur d'arrêt exclue:
>>> range(0, 6, 1)
[0, 1, 2, 3, 4, 5]
Vous donne toujours des indices pour chaque élément de la liste.
Cette réponse est peut-être un peu dépassée, mais elle pourrait être utile pour quelqu'un qui est resté avec le même problème. Vous pouvez obtenir une liste inversée avec une fin arbitraire - jusqu'à 0 index, en appliquant une deuxième tranche sur place comme ceci:
>>> L = list(range(10))
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> (start_ex, end) = (7, 0)
>>> L[end:start_ex][::-1]
[6, 5, 4, 3, 2, 1, 0]
Utilisation
>>>foo[::-1]
Cela affiche l'inverse de la liste de l'élément de fin au début,