[Python] l'amore per il pitone

Piergiuliano Bossi pgbossi a gmail.com
Mer 18 Set 2013 04:29:05 CEST


>
>
> >>>> print list(flatmap([1, 2, 3, 4, 5], lambda x: x + 1))
> > Traceback (most recent call last): File "<stdin>", line 1, in
> > <module> File "<stdin>", line 3, in flatmap TypeError: 'int' object
> > is not iterable
> >
>
> Si, perch│ per "contratto" la funzione chiamata deve restituire una
> sequenza.
>
> Comunque non sono sicuro di capire cosa intendi con "lista di
> partenza": │ quella che passi come primo argomento a flatmap?
>

Si', [1, 2, 3, 4, 5]


> In questo caso, non │ il motivo per cui la funzione fallisce.
>
> La versione in Scala funziona in entrambi questi casi:
>
> flatmap([1, 2, 3, 4, 5], lambda x: x + 1))
> flatmap([1, 2, 3, 4, 5], lambda x: [x + 1))
>
> ?
>
>
Ho toppato e alla grande: il comportamento di Scala e' identico a Python
(con un messaggio d'errore che e' tutto un programma, te lo risparmio). E'
Ruby quello con cui puoi fare flatmap su una collezione gia' piatta e non
si imbufalisce.
Ovvero:

irb(main):001:0> a = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):002:0> a.flat_map{|x| x + 1}
=> [2, 3, 4, 5, 6]
irb(main):003:0> a.flat_map{|x| [x + 1]}
=> [2, 3, 4, 5, 6]
irb(main):004:0>

Questo proprio perche' la flatmap di Ruby e' analoga a fare una map,
seguita da una flatten.


> E' facile modificare la funzione in modo da funzionare in ogni caso,
> ma non mi sembra una buona idea.
>

Ok.

Ciao,
Giuliano



-- 
Piergiuliano Bossi
Blog: http://thinkingbox.wordpress.com/
Twitter: http://twitter.com/thinkingbox (English)
Twitter: http://twitter.com/scatolapensante (Italiano)
Google+: https://plus.google.com/u/0/108187981162465525118
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130917/b408370b/attachment.html>


Maggiori informazioni sulla lista Python