[Python] Lughezza singolo elemento di una lista annidata

Gianluca Bargelli g.bargelli a gmail.com
Ven 18 Feb 2011 18:23:32 CET


Il 18 febbraio 2011 17:43, Daniele Varrazzo <piro a develer.com> ha scritto:
> 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__.
>

Hai ragione, la documentazione su len() parla solo di sequenze e
mapping [1], non di iterabili: non so come mai nella mia testaccia
bacata ho fatto l'associazione "sequenza = iterabile". Mea Culpa!

[1]: http://docs.python.org/library/functions.html#len

-- 
-Gianluca
http://proudlygeek.appspot.com


Maggiori informazioni sulla lista Python