Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Liste de liste

4 réponses
Avatar
chris66
Bonjour =E0 tous (et =E0 toutes),


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

Lorsque j'it=E8re sur x, j'obtiens bien un objet liste mais impossible
d'avoir acc=E8s =E0 ses m=E9thodes habituelles.
Par exemple:
x =3D [[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=E9es =E0 me soumettre ?
merci par avance

chris

4 réponses

Avatar
Daireaux Jean-Baptiste
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.

Avatar
yves
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

Avatar
chris66
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
Avatar
bruno.desthuilliers
On 17 avr, 17:56, chris66 wrote:
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