OVH Cloud OVH Cloud

L'astuce de 22h.31

11 réponses
Avatar
Do Re Mi chel La Si Do
Bonsoir !


Pour obtenir une copie inversée d'une liste :

l=['A','B','C', 4, 5, 6]
print l[::-1]


Mince, il y avait déjà .reverse()

Bon, tant pis, je laisse le message.


MCI

10 réponses

1 2
Avatar
Amaury
Bonsoir,

Bonsoir !


Pour obtenir une copie inversée d'une liste :

l=['A','B','C', 4, 5, 6]
print l[::-1]


Mince, il y avait déjà .reverse()

Bon, tant pis, je laisse le message.




Comme d'habitude avec python, les deux ne sont pas identiques :
l.reverse() modifie la liste sur place.
l[::-1] crée une nouvelle copie...

--
Amaury

Avatar
Do Re Mi chel La Si Do
Bonsoir !

En fait, je voulais juste rappeler les slices à pas négatifs.

MCI
Avatar
Guillaume Bouchard
Amaury wrote:
Comme d'habitude avec python, les deux ne sont pas identiques :
l.reverse() modifie la liste sur place.
l[::-1] crée une nouvelle copie...


a = range(5)
a
[0, 1, 2, 3, 4]



a[::-1]
[4, 3, 2, 1, 0]



a
[0, 1, 2, 3, 4]



reversed(a)
<listreverseiterator object at 0xb7b9a26c>



list(reversed(a))
[4, 3, 2, 1, 0]



a.reverse()
a
[4, 3, 2, 1, 0]




Il y a aussi reversed dans le cas ou l'on veuille juste iterer sur
l'inverse de la liste (Trés pratique).

Bref, on retiendra :

- Copie de liste inversée : [::-1]
- iteration inversée : reversed() (2.4)
- reverse de la liste : .reverse()

À voir maitenant sir list(reversed(a)) est plus rapide que que a[::-1] ?
That's a question.

Bonne nuit.

--
Guillaume.



Avatar
Encolpe Degoute

Il y a aussi reversed dans le cas ou l'on veuille juste iterer sur
l'inverse de la liste (Trés pratique).


Attention, reversed n'est disponible qu'avec python 2.4

Cordialement,
--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales

Avatar
philippe
In article <43825894$0$4311$, Do Re Mi chel La Si
Do wrote:

Bonsoir !

En fait, je voulais juste rappeler les slices à pas négatifs.

MCI

Je saute sur l'occasion ( en espérant que personne ne s'appelle

occasion dans la salle:-))
parce que justement :
a[:-1] j'ai pas trop de mal à comprendre
ça retourne la liste moins le dernier élément
mais a[::-1] là je cale pour comprendre ce qui se passe
disons que j'aimerais savoir ce que fait l'opérateur ':' précisemment
Avant de poster une dernière petite recherche me montre que je peux
faire ça
b=range(10)
b[10:0:-1] qui retourne
[9, 8, 7, 6, 5, 4, 3, 2, 1]

donc la notation b[::-1] est probablementune contraction du "double
slicing"
qui se lirait :
commencer à 10 jusqu'à 0 par pas négatif de 1
donc on commence par la fin on recule à chaque étape de 1 pas
mais comment obtenir le premier élément ?
donc si il y a qqn qui est "trop fort" et qui veut bien soit
m'expliquer soit me donner une adresse où on trouve une explication de
cette "diablerie" ....

philippe

Avatar
Do Re Mi chel La Si Do
mais comment obtenir le premier élément ?




Si j'ai bien compris la question : b[0] est la réponse.
(et b[-1] le dernier élément)

Mais, ai-je bien compris ?


@+

MCI



Avatar
Amaury
a[:-1] j'ai pas trop de mal à comprendre
ça retourne la liste moins le dernier élément
mais a[::-1] là je cale pour comprendre ce qui se passe
disons que j'aimerais savoir ce que fait l'opérateur ':' précisemment


':' n'est pas un opérateur, mais plutôt une ponctuation (comme dans
d'autres langages, je veux dire 'langues' : le français par exemple)

Avant de poster une dernière petite recherche me montre que je peux
faire ça
b=range(10)
b[10:0:-1] qui retourne
[9, 8, 7, 6, 5, 4, 3, 2, 1]

donc la notation b[::-1] est probablementune contraction du "double
slicing"
qui se lirait :
commencer à 10 jusqu'à 0 par pas négatif de 1
donc on commence par la fin on recule à chaque étape de 1 pas


Oui. En fait la syntaxe complète est:
b[début:fin:pas]
- On commence par le début, on s'arrête juste avant la fin, en ajoutant
le 'pas' à chaque fois !
- Si 'début' ou 'fin' est négatif, python y ajoute la longueur de la
liste ; ça permet de compter depuis la fin de la liste.
Chaque élément a une valeur par défaut:
- pour le début, c'est le début(*)
- pour la fin, c'est la fin(*)
- pour le pas, c'est 1.
(*)Si le pas est négatif, on commence par la fin...


mais comment obtenir le premier élément ?
b[0] ?


donc si il y a qqn qui est "trop fort" et qui veut bien soit
m'expliquer soit me donner une adresse où on trouve une explication de
cette "diablerie" ....

philippe


--
Amaury

Avatar
philippe
Merci pour ses précisions
En tretemps j'avais "découvert" la syntaxe complète a[début:fin:pas]
sur un exemple, je toujours pas vu une doc où cela soit dit de façon
explicite ( on nous cacherait des choses en python ? :-)

Par contre je n'ai jamais entendu parler de "ponctuation" dan sune
langage informatique ....
philippe

In article <4386298d$0$41140$, Amaury
wrote:

a[:-1] j'ai pas trop de mal à comprendre
ça retourne la liste moins le dernier élément
mais a[::-1] là je cale pour comprendre ce qui se passe
disons que j'aimerais savoir ce que fait l'opérateur ':' précisemment


':' n'est pas un opérateur, mais plutôt une ponctuation (comme dans
d'autres langages, je veux dire 'langues' : le français par exemple)

Avant de poster une dernière petite recherche me montre que je peux
faire ça
b=range(10)
b[10:0:-1] qui retourne
[9, 8, 7, 6, 5, 4, 3, 2, 1]

donc la notation b[::-1] est probablementune contraction du "double
slicing"
qui se lirait :
commencer à 10 jusqu'à 0 par pas négatif de 1
donc on commence par la fin on recule à chaque étape de 1 pas


Oui. En fait la syntaxe complète est:
b[début:fin:pas]
- On commence par le début, on s'arrête juste avant la fin, en ajoutant
le 'pas' à chaque fois !
- Si 'début' ou 'fin' est négatif, python y ajoute la longueur de la
liste ; ça permet de compter depuis la fin de la liste.
Chaque élément a une valeur par défaut:
- pour le début, c'est le début(*)
- pour la fin, c'est la fin(*)
- pour le pas, c'est 1.
(*)Si le pas est négatif, on commence par la fin...


mais comment obtenir le premier élément ?
b[0] ?


donc si il y a qqn qui est "trop fort" et qui veut bien soit
m'expliquer soit me donner une adresse où on trouve une explication de
cette "diablerie" ....

philippe




Avatar
Amaury
Bonjour,

Merci pour ses précisions
En tretemps j'avais "découvert" la syntaxe complète a[début:fin:pas]
sur un exemple, je toujours pas vu une doc où cela soit dit de façon
explicite ( on nous cacherait des choses en python ? :-)


Tout est là, en anglais :
http://docs.python.org/ref/slicings.html


Par contre je n'ai jamais entendu parler de "ponctuation" dan sune
langage informatique ....
philippe


Eh bien, maintenant c'est fait !
Dans mon jargon, c'est tout ce qui n'a pas d'autre signification que de
séparer et de regrouper des expressions :
. , ; : ( ) [ ] { }
Mais c'est sans garantie d'aucun gouvernement !

--
Amaury

Avatar
jean-michel
philippe wrote:
Merci pour ses précisions
En tretemps j'avais "découvert" la syntaxe complète a[début:fin:pas]
sur un exemple, je toujours pas vu une doc où cela soit dit de façon
explicite ( on nous cacherait des choses en python ? :-)
Doc officielle : chapitre '2.3.6 Sequence Types'

Le Tutorial de Guido van Rossum: '3.1.2 Strings'
Ces docs sont dispo sur http://www.python.org/doc/
Elles existent en format Windows help (chm) et en html.
Le tutorial est très riche et très bien fait (comme le langage lui-même,
voilà !), et soit dit en passant donne très souvent la réponse aux
questions que l'on se pose quand on commence en python, et même après.

Par contre je n'ai jamais entendu parler de "ponctuation" dan sune
langage informatique ....
ça existe en cobol, tu sais, le machin des cartes perforées ;-)

A+
jm

1 2