2013/9/17 Manlio Perillo <manlio.peri...@gmail.com>

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 17/09/2013 18:59, Piergiuliano Bossi wrote:
> > [...] Non e' particolarmente interessante focalizzarsi ne' su
> > map/reduce ne' sulle collezioni in generale.
> >
> > Comunque, un altro esempio e' questo => puoi usare itertools.chain
> > per implementare una flatmap (sicuro che non vuoi il codice Python?
> > allora non leggere :) )
> >
>
> Non tutti conoscono Scala e sanno cosa fa flatmap.
>

Beh, dai, e' comune a svariati linguaggi (eg: in Ruby e' facile da
implementare). In pratica e' una map, seguita da una flatten, cosi' se la
collezione risultante e' nestata la appiattisci. Vedi ad esempio
http://stackoverflow.com/questions/1077015/python-list-comprehensions-compressing-a-list-of-lists

Comunque se ho capito quello che fa:
>
>
Hai decisamente capito. :)


> ##BEGIN##
> def flatmap(seq, fun):
>     for x in seq:
>         for y in fun(x):
>             yield y
>
>
> def foo(x):
>     return [x - 1, x, x + 1]
>
>
> print list(flatmap([1, 2, 3, 4, 5], foo))
> ##END##
>
> La list alla fine serve a stampare correttamente la sequenza "lazy"
>

Bello, mi piace molto, ma soffre lo stesso problema dell'uso di chain:
lancia un'eccezione se la lista di partenza e' gia' "piatta".

>>> 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


> (Python non │ Haskell).
>
>
Potrebbe diventare la tua tagline ogni volta che mi scrivi un messaggio. ;)

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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a