[Python] Lughezza singolo elemento di una lista annidata

Daniele Varrazzo piro a develer.com
Ven 18 Feb 2011 17:43:30 CET


On Fri, 18 Feb 2011 16:59:32 +0100, Gianluca Bargelli
<g.bargelli a gmail.com> wrote:
> Ok, ho visto il mio errore di prima (l'inutile len(str(item)), ecco
> una versione pulita:
> 
> for item in ['ciao!', 1, ['mela', 'pera', 'banana'], [1, 2, 3]]:
> ...     try:
> ...             print len(item)
> ...     except TypeError:
> ...             print 0  #L'elemento non ha lunghezza
> ...
> 
> Una soluzione migliore sarebbe controllare se l'oggetto è iterabile,
> vedi [1] e [2].


[1]:
http://stackoverflow.com/questions/1952464/in-python-how-do-i-determine-if-a-variable-is-iterable
[2]:
http://stackoverflow.com/questions/2824612/handle-iterable-and-non-iterable-seamlessly


Avere una lunghezza ed essere iterabile non sono la stessa cosa. Alcuni
oggetti sono iterabili ma non hanno lunghezza (es. i generatori). Se vuoi
fare senza il try/except dovresti controllare l'esistenza di __len__, non
di __iter__.


-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python