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