OVH Cloud OVH Cloud

syntaxe du slicing

6 réponses
Avatar
philippe
Qqn peut il me dire où je pourrais trouver l'explication de la syntaxe
du slicing.
On trouve facilement l'explication pour
a[n:m]
mais je n'ai pas trouver d'explication pour
a[n:m:p]
bien qu'avec quelques essais j'ai compris
que n est l'indice de départ, m l'indice maximum et p le pas
d'incrémentation de l'indice
mais il reste un point obsur :
supposons :
a="abcdefgh"
a[0:len(a):1] retourne la chaine complète (commence à 0 jusqu'à la fin
de chaine par pas de 1 OK)
mais
a[len(a):0:-1] retourne : 'hgfedcb'
alors que
a[len(a)::-1] retourne : 'hgfedcba'
que faut il mettre comme valeur en position centrale pour obtenir la
chaine inverse complète ?
philippe

6 réponses

Avatar
Do Re Mi chel La Si Do
a[::-1]

Tout simplement. Les "len(" sont inutiles, et peuvent tromper, car la
longueur ne correspond pas à la position (e.g. longueur 1 pour le 1er
élément indicé à 0).

@+

MCI
Avatar
philippe
Merci de ta réponse mais
ce n'était pas la question !-)

la question qu'est ce que je peux mettre en position CENTRALE (entre
les deux ::) qui donne le même résultat que si je ne mets rien

tu me dire <<question inutile puisque qu'avec a[::-1] ça marche, certes
mais j'aimerais comprendre :-)

or
si je tape
a[::-1] retour toute la chaine inversée
a[:0:-1] dito sauf premier caractère
donc logiquement j'essaye
a[:-1:-1] et là chaine vide

tu peux me dire <<normal tu tapes un indice de départ négatif qui ne
correspond à rien dan sla chaine, mais pour moi le pb ne fait que de
s'obscurcir car

avec 0 le slicing s'arrête sur l'avant dernier caractère
et avec -1 plus rien


In article <43841d62$0$4355$, Do Re Mi chel La Si
Do wrote:

a[::-1]

Tout simplement. Les "len(" sont inutiles, et peuvent tromper, car la
longueur ne correspond pas à la position (e.g. longueur 1 pour le 1er
élément indicé à 0).

@+

MCI





Avatar
Christophe
Merci de ta réponse mais
ce n'était pas la question !-)

la question qu'est ce que je peux mettre en position CENTRALE (entre
les deux ::) qui donne le même résultat que si je ne mets rien

tu me dire <<question inutile puisque qu'avec a[::-1] ça marche, certes
mais j'aimerais comprendre :-)


Je dirais que c'est impossible. Une limitation de la syntaxe de slicing
pour les indices négatifs.

Tu remarqueras aussi que ces 2 formes sont équivalentes :

a[len(a)::-1]
a[len(a)-1::-1]

Et que la deuxième est un plus précise.

Avatar
Richard Delorme
Merci de ta réponse mais
ce n'était pas la question !-)

la question qu'est ce que je peux mettre en position CENTRALE (entre
les deux ::) qui donne le même résultat que si je ne mets rien

tu me dire <<question inutile puisque qu'avec a[::-1] ça marche, certes
mais j'aimerais comprendre :-)

or
si je tape
a[::-1] retour toute la chaine inversée
a[:0:-1] dito sauf premier caractère
donc logiquement j'essaye
a[:-1:-1] et là chaine vide

tu peux me dire <<normal tu tapes un indice de départ négatif qui ne
correspond à rien dan sla chaine, mais pour moi le pb ne fait que de
s'obscurcir car

avec 0 le slicing s'arrête sur l'avant dernier caractère
et avec -1 plus rien


En indice, -1 désigne le dernier élément, -2 l'avant dernier, ... et
-len(a) le premier élément. Ainsi a[:-1:-1], crée la liste depuis le
dernier élément jusqu'au dernier élément exclus, donc une liste vide.
a[:0:-1] crée une liste de tous les éléments depuis le dernier jusqu'au
premier exclus, donc n'affiche pas le premier élément.
En fait, la liste entière inversée peut-être obtenue avec :
a[-1:-len(a)-1:-1]

--
Richard

Avatar
Christophe

Merci de ta réponse mais ce n'était pas la question !-)

la question qu'est ce que je peux mettre en position CENTRALE (entre
les deux ::) qui donne le même résultat que si je ne mets rien

tu me dire <<question inutile puisque qu'avec a[::-1] ça marche, certes
mais j'aimerais comprendre :-)

or
si je tape
a[::-1] retour toute la chaine inversée
a[:0:-1] dito sauf premier caractère
donc logiquement j'essaye
a[:-1:-1] et là chaine vide

tu peux me dire <<normal tu tapes un indice de départ négatif qui ne
correspond à rien dan sla chaine, mais pour moi le pb ne fait que de
s'obscurcir car

avec 0 le slicing s'arrête sur l'avant dernier caractère et avec -1
plus rien



En indice, -1 désigne le dernier élément, -2 l'avant dernier, ... et
-len(a) le premier élément. Ainsi a[:-1:-1], crée la liste depuis le
dernier élément jusqu'au dernier élément exclus, donc une liste vide.
a[:0:-1] crée une liste de tous les éléments depuis le dernier jusqu'au
premier exclus, donc n'affiche pas le premier élément.
En fait, la liste entière inversée peut-être obtenue avec :
a[-1:-len(a)-1:-1]


Je n'avais pas pensé à faire ça comme ça, bien joué :)


Avatar
philippe
Merci pour cette explication, en fait il ne faut pas oublier qu'en
indice négatif on fonctionne "en marche arrière"
Donc on peut supposer que qd on écrit
a[::-1]
il y a (de façon interne) une substitution du genre de celle que tu
indiques :
a[-1:-(len(a)+1):-1]
qui permet de parcourir la chaine intégralement
Merci d'avoir pris a peine de me donner une réponse à une question pas
variment essentielle mais qui me "turlupinait" depsui que j'étais tombé
sur la diabolique expression :
a[::-1]
philippe

In article <438441d6$0$4376$, Richard
Delorme wrote:

Merci de ta réponse mais
ce n'était pas la question !-)

la question qu'est ce que je peux mettre en position CENTRALE (entre
les deux ::) qui donne le même résultat que si je ne mets rien

tu me dire <<question inutile puisque qu'avec a[::-1] ça marche, certes
mais j'aimerais comprendre :-)

or
si je tape
a[::-1] retour toute la chaine inversée
a[:0:-1] dito sauf premier caractère
donc logiquement j'essaye
a[:-1:-1] et là chaine vide

tu peux me dire <<normal tu tapes un indice de départ négatif qui ne
correspond à rien dan sla chaine, mais pour moi le pb ne fait que de
s'obscurcir car

avec 0 le slicing s'arrête sur l'avant dernier caractère
et avec -1 plus rien


En indice, -1 désigne le dernier élément, -2 l'avant dernier, ... et
-len(a) le premier élément. Ainsi a[:-1:-1], crée la liste depuis le
dernier élément jusqu'au dernier élément exclus, donc une liste vide.
a[:0:-1] crée une liste de tous les éléments depuis le dernier jusqu'au
premier exclus, donc n'affiche pas le premier élément.
En fait, la liste entière inversée peut-être obtenue avec :
a[-1:-len(a)-1:-1]