[Python] Lughezza singolo elemento di una lista annidata

Giovanni Porcari giovanni.porcari a softwell.it
Ven 18 Feb 2011 21:43:29 CET


Il giorno 18/feb/2011, alle ore 11.59, Robertino Ceccherini ha scritto:

> 
> Ciao a tutti,
> 
> sono un principiante di Python e vorrei chiedere una piccola domanda a che ne sa piu' di me...
> 
> sto facendo un esercizio sulle liste annidate,
> ecco il codice :
> 
> # Definizione funzione LunghezzaLista.
> def LunghezzaLista():
>    Lista = ['ciao!', 1, ['mela', 'pera', 'banana'], [1, 2, 3]]
>    i = 0
>    while i < len(Lista):
>        print len(Lista[i])
>        i = i + 1
> 
> La funzione dovrebbe nel mio intento stampare la lunghezza
> di ogni elemento della lista annidata
> Mi da un errore sull'istruzione len(Lista[i])
> sicuramente non ho capito bene perche' len(lista) ritorna il
> numero degli elementi mentre per la lunghezza di un elemento
> singolo non ho capito bene la sintassi,
> grazie in anticipo per la risposta,


A stretto rigore di termini "stampare la lunghezza di ogni
elemento della lista annidata" dovrebbe escludere gli 
elementi della lista primaria che NON siano liste.

Quindi la risposta potrebbe essere se simboleggiamo con '*'
il fatto che l'elemento non ammetta lunghezza .:

[ '*','*',[4,4,6],['*','*','*']] 

In tal caso potresti usare una semplicissima istruzione:

[[len(k) if hasattr(k,'__len__') else '*' for k in m] if isinstance(m,list) else '*' for m in Lista]

che risolve il tuo problema in modo elegante ed estremamente leggibile :D:D:D

G

P.S.
Il che dimostra che a parte le risposte, anche le domande a volte
possono essere soggette ad interpretazione.





Maggiori informazioni sulla lista Python