<div dir="ltr">2013/9/17 Carlos Catucci <span dir="ltr"><<a href="mailto:carlos.catucci@gmail.com" target="_blank">carlos.catucci@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div class="gmail_extra"><div class="im"><div class="gmail_quote"><br></div></div>Au contraire, la list comprehension e', come dice il nome stesso, comprensibile anche a chi non conosca il Python, la lambda e' criptica come puo' esserlo l'operatore ternario del C per un non iniziato.<br>


<br clear="all"></div></div></blockquote><div><br></div><div><a href="https://en.wikipedia.org/wiki/List_comprehension#History">https://en.wikipedia.org/wiki/List_comprehension#History</a><br></div><div><br></div><div>:D</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div>Io pero' ti chiedevo esempi di pseudocodice (e non di codice Python) dove useresti appunto map e reduce pittosto che le LC.</div>
<div class="im"><div class="gmail_extra"><br></div></div></div></div></blockquote><div><br></div><div>Non e' particolarmente interessante focalizzarsi ne' su map/reduce ne' sulle collezioni in generale.</div><div>
<br></div><div>Comunque, un altro esempio e' questo => puoi usare itertools.chain per implementare una flatmap (sicuro che non vuoi il codice Python? allora non leggere :) )</div><div><br></div><div>Da un mio scambio privato con un pythonista da queste parti:</div>
<div><div>>>> func = lambda  2 * x</div><div>>>> func(2)</div><div>4</div><div>>>> a = [1, 2, 3, 4]</div><div>>>> b = [2, 3, 4, 5]</div><div>>>> map(func, a)</div><div>[2, 4, 6, 8]</div>
<div>>>> from itertools import *</div><div>>>> list(chain(*[a, b]))</div><div>[1, 2, 3, 4, 2, 3, 4, 5]</div><div>>>> list(chain([a, b]))</div><div>[[1, 2, 3, 4], [2, 3, 4, 5]]</div><div>>>> list(chain(*map(func, a)))</div>
<div>Traceback (most recent call last):</div><div>  File "<stdin>", line 1, in <module></div><div>TypeError: 'int' object is not iterable</div><div>>>> list(chain(*map(func, [a, b])))</div>
<div>[1, 2, 3, 4, 1, 2, 3, 4, 2, 3, 4, 5, 2, 3, 4, 5]</div><div>>>> func2 = lambda iter: sum(iter)</div><div>>>> func2(a)</div><div>10</div><div>>>> list(chain(*map(func2, [a, b])))</div><div>Traceback (most recent call last):</div>
<div>  File "<stdin>", line 1, in <module></div><div>TypeError: 'int' object is not iterable</div><div>>>> func2 = lambda iter: [sum(iter)]</div><div>>>> func2(a)</div><div>
[10]</div><div>>>> map(func2, [a, b])</div><div>[[10], [14]]</div><div>>>> list(chain(*map(func2, [a, b])))</div><div>[10, 14]</div><div>>>> list(chain.from_iterable(map(func2, [a, b]))) # this saves you from typing  at the expense of typing from_iterable</div>
<div>[10, 14]</div><div>>>></div></div><div><br></div><div><br></div><div>Cosi' facendo se la tua collezione e' gia' flat hai un'eccezione (perche' i singoli elementi non sono iterabili). </div>
</div><div class="gmail_extra"><br></div>Qual e' il modo migliore per implementare una flatmap in Python?</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">Ciao,</div><div class="gmail_extra">
Giuliano</div><div class="gmail_extra"><br></div><div><br></div>-- <br>Piergiuliano Bossi<br>Blog: <a href="http://thinkingbox.wordpress.com/" target="_blank">http://thinkingbox.wordpress.com/</a><br>Twitter: <a href="http://twitter.com/thinkingbox" target="_blank">http://twitter.com/thinkingbox</a> (English)<br>
Twitter: <a href="http://twitter.com/scatolapensante" target="_blank">http://twitter.com/scatolapensante</a> (Italiano)<br><div>Google+: <a href="https://plus.google.com/u/0/108187981162465525118" target="_blank">https://plus.google.com/u/0/108187981162465525118</a></div>

</div></div>