[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