Liste de liste

Le
chris66
Bonjour à tous (et à toutes),


J'ai eu beau chercher dans les archives du groupe, je n'ai rien pu
trouver sur les listes de listes.
Gné ? Qé ki dit ?
Je parle de ces objets:
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]
par exemple

Lorsque j'itère sur x, j'obtiens bien un objet liste mais impossible
d'avoir accès à ses méthodes habituelles.
Par exemple:
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]

for d in x:
print d, d.reverse(), d.sort(), d.__class__



me renvoie
[1] None None <type 'list'>
[1, 2] None None <type 'list'>
[7, 8] None None <type 'list'>
[5, 8, 9] None None <type 'list'>
[1, 9, 7, 66] None None <type 'list'>


Avez-vous des idées à me soumettre ?
merci par avance

chris
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daireaux Jean-Baptiste
Le #4237481
Bonjour à tous (et à toutes),


J'ai eu beau chercher dans les archives du groupe, je n'ai rien pu
trouver sur les listes de listes.
Gné ? Qé ki dit ?
Je parle de ces objets:
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]
par exemple

Lorsque j'itère sur x, j'obtiens bien un objet liste mais impossible
d'avoir accès à ses méthodes habituelles.
Par exemple:
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]

for d in x:
print d, d.reverse(), d.sort(), d.__class__



me renvoie
[1] None None <type 'list'>
[1, 2] None None <type 'list'>
[7, 8] None None <type 'list'>
[5, 8, 9] None None <type 'list'>
[1, 9, 7, 66] None None <type 'list'>


Avez-vous des idées à me soumettre ?
merci par avance

chris


Je croit que la méthode reverse() et sort() renvoie pas de résultat
(si None)

elle modifie la liste sur laquelle on les applique.

Bonne soirée.
J.B.D.

yves
Le #4237471
Le Thu, 17 Apr 2008 18:01:53 +0200, Daireaux Jean-Baptiste a écrit:

Bonjour,

Je croit que la méthode reverse() et sort() renvoie pas de résultat (si
None)

elle modifie la liste sur laquelle on les applique.


Du code:
################
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]

for d in x:
print d, d.__class__
d.reverse()
print "d.reverse(): ", d
d.sort()
print "d.sort(): ", d
################
Et encore du code:
##############
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]
for d in x:
print d, sorted(d), list(reversed(d)), d.__class__
################

--
Yves

chris66
Le #4246631
Hummmmmmmmmmm,

J'avais oublié que list.sort() ne crée pas une copie de list qui soit
triée, mais trie directement la liste en question...
C'est ce que doit vouloir dire ipython par **IN PLACE** quand on fait
x.sort??
####################
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in method sort of list object at
0x2abc7dcf47a0>
Namespace: Interactive
Docstring:
L.sort(cmp=None, key=None, reverseúlse) -- stable sort *IN
PLACE*;
cmp(x, y) -> -1, 0, 1
#########################


En tout cas merci pour vos réponses et votre rapidité.
chris
bruno.desthuilliers
Le #4484691
On 17 avr, 17:56, chris66
Bonjour à tous (et à toutes),

J'ai eu beau chercher dans les archives du groupe, je n'ai rien pu
trouver sur les listes de listes.
Gné ? Qé ki dit ?
Je parle de ces objets:
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]
par exemple

Lorsque j'itère sur x, j'obtiens bien un objet liste mais impossible
d'avoir accès à ses méthodes habituelles.
Par exemple:
x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]

for d in x:
print d, d.reverse(), d.sort(), d.__class__

me renvoie
[1] None None <type 'list'>
[1, 2] None None <type 'list'>
[7, 8] None None <type 'list'>
[5, 8, 9] None None <type 'list'>
[1, 9, 7, 66] None None <type 'list'>

Avez-vous des idées à me soumettre ?


Bon, tu a déjà eu la réponse (list.sort et list.reverse sont
destructives et renvoient None). Juste un petit détail qui aurait dû
te mettre la puce à l'oreille : si tu n'avais effectivement plus "eu
accès" aux méthodes des "sous-listes", les appels à d.reverse et
d.sort auraient levé un AttributeError. Ce qui n'est pas le cas.

Dans ce genre de cas, souvient toi qu'en Python, une méthode est aussi
un attribut (de classe, mais pour ce qui nous intéresse ici, c'est un
détail). Ce qui déclenche l'appel de la methode, c'est l'application
de l'opérateur d'appel (les parenthèses) sur l'objet method retourné
par la résolution d'attribut. Donc si tu omets l'opérateur d'appel, tu
a l'objet method lui même. Et là, tu peux aisément constater que tu y
a bien accès:

x = [[1],[1,2],[7,8],[5,8,9],[1,9,7,66]]

for d in x:
print d, d.reverse, d.sort, d.__class__

Ce qui ici donne:

[1] <built-in method reverse of list object at 0xb7bf8a2c> <built-in
method sort of list object at 0xb7bf8a2c> <type 'list'>
[1, 2] <built-in method reverse of list object at 0xb7bf8fac> <built-
in method sort of list object at 0xb7bf8fac> <type 'list'>
[7, 8] <built-in method reverse of list object at 0xb7bfc1ec> <built-
in method sort of list object at 0xb7bfc1ec> <type 'list'>
[5, 8, 9] <built-in method reverse of list object at 0xb7bf8b8c>
<built-in method sort of list object at 0xb7bf8b8c> <type 'list'>
[1, 9, 7, 66] <built-in method reverse of list object at 0xb7bfc38c>
<built-in method sort of list object at 0xb7bfc38c> <type 'list'>

HTH

Publicité
Poster une réponse
Anonyme