Détails
Comprendre la notation des tranches
J'ai besoin d'une bonne explication (les références sont un plus) sur la notation des tranches de Python.
Pour moi, cette notation a besoin d'être améliorée.
Elle semble extrêmement puissante, mais je n’ai pas encore réussi à la comprendre.
2992
3
C'est assez simple, vraiment :
Il y a aussi la valeur
step
, qui peut être utilisée avec n'importe lequel des éléments ci-dessus :Le point clé à retenir est que la valeur
:stop
représente la première valeur qui n'est pas dans la tranche sélectionnée. Ainsi, la différence entrestop
etstart
est le nombre d'éléments sélectionnés (sistep
est 1, la valeur par défaut).L'autre caractéristique est que
start
oustop
peut être un nombre négatif, ce qui signifie qu'il compte à partir de la fin du tableau au lieu du début. Ainsi :De même,
step
peut être un nombre négatif :Python est gentil avec le programmeur s'il y a moins d'éléments que ce que vous demandez. Par exemple, si vous demandez
a[:-2]
et quea
ne contient qu'un seul élément, vous obtenez une liste vide au lieu d'une erreur. Parfois, vous préférez l'erreur, donc vous devez être conscient que cela peut arriver.Relation avec l'objet
slice()
.L'opérateur de découpage en tranches
[]
est en fait utilisé dans le code ci-dessus avec un objetslice()
en utilisant la notation:
(qui n'est valide que dans[]
), c'est-à-dire :est équivalent à :
Les objets Slice se comportent aussi légèrement différemment selon le nombre d'arguments, de la même manière que
range()
, c'est-à-dire que les deuxslice(stop)
etslice(start, stop[, step])
sont supportés. Pour ne pas spécifier un argument donné, on peut utiliserNone
, de sorte que, par exemple,a[start :]
est équivalent àa[slice(start, None)]
oua[::-1]
est équivalent àa[slice(None, None, -1)]
.Bien que la notation basée sur
:
soit très utile pour le découpage simple, l'utilisation explicite des objetsslice()
simplifie la génération programmatique du découpage.Le [tutoriel Python][1] en parle (faites défiler la page jusqu'à la partie concernant le découpage en tranches).
Le diagramme ASCII est également utile pour se souvenir du fonctionnement des tranches :
[1] : http://docs.python.org/tutorial/introduction.html#strings
Enumération des possibilités permises par la grammaire :
Bien sûr, si
(high-low)%stride != 0
, alors le point final sera un peu plus bas quehigh-1
.Si
stride
est négatif, l'ordre est un peu modifié puisque nous comptons vers le bas :Les découpages étendus (avec virgules et ellipses) ne sont utilisés que par des structures de données spéciales (comme NumPy) ; les séquences de base ne les supportent pas.