2013/9/18 Manlio Perillo <manlio.peri...@gmail.com> > Peccato che flatten non sia disponibile in itertools, e non credo sia > implementabile in modo elegante. > > Dipende cosa intendi con "elegante". A me questa non dispiace:
import collections as c def flatten(obj): """ >>> list(flatten(1)) [1] >>> list(flatten([1, 2, 3])) [1, 2, 3] >>> list(flatten([1, [2, 3], [4, 5], 6])) [1, 2, 3, 4, 5, 6] """ stack = [obj] while stack: current = stack.pop() if isinstance(current, c.Sequence): stack.extend(reversed(current)) else: yield current if __name__ == '__main__': import doctest doctest.testmod() Facilmente adattabile per una flatmap alla ruby. Non e testata molto (come si puo' vedere), ma sembra ragionevole. Si, avrei potuto usare ricorsione esplicita invece dello stack, ma poi si sarebbe complicata la gestione del generatore, temo. Poi possiamo girarci intorno: Python supporta alcuni costrutti funzionali ma quello che e' e rimane e' un linguaggio *imperativo* ad oggetti. In pratica le parti veramente funzionali di python girano intorno ad itertools e functools e a poche features del core (LC). Insomma, Python e' un linguaggio che *sceglie* di avere degli statement e non di essere tutto un'espressione. Vorra' pur dire qualcosa. -- . ..: -enrico-
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python