2010-01-19 26 views

Respuesta

2

Aquí es una especie rápida:

def qsort (list): 
    if (len(list) > 1): 
     list = qsort(filter (lambda x: x <= list[0], list[1:])) + [list[0]] + qsort(filter (lambda x: x > list[0], list[1:])) 
    return list 

Ésta es una solución a un rompecabezas de programación de encontrar un número que falta entre los números enteros de 1 a 100:

from random import randint 
nos = range(1,101) 
to_remove = randint(1,100) 
nos.remove(to_remove) 
print "Removed %d from list" % to_remove 

found = 5050 - reduce (lambda x,y: x+y, nos) 
print "You removed %d " % found 
7

Python is not lisp. Por favor, no intente que se vea de esa manera. Solo reduce una de las mayores fortalezas de Python, que es su legibilidad y comprensión más adelante.

Si te gusta la programación funcional, aprende Haskell, ML, o F#. Se sorprenderá de lo que ofrecen esos idiomas (para empezar, funciones puras).

+0

Estoy de acuerdo con ML: a menudo se pasa por alto – zebrabox

3

Tenga cuidado al programar python en estilo funcional. La única razón para hacerlo es por la legibilidad. Si el algoritmo se expresa de forma más elegante funcionalmente que imperativamente, y no causa problemas de rendimiento (por lo general no lo hace), adelante.

Sin embargo, python no optimiza la recursividad de cola, y tiene un límite de recursión fijo de 1000, por lo que generalmente no puede hacer O (n) recursividad, solo O (log (n)).

Además, reduce() se elimina en python 3, por una buena razón (http://www.artima.com/weblogs/viewpost.jsp?thread=98196). La mayoría de los usos no triviales de reducir son más legibles como un bucle normal en lugar de una reducción, y sum() ya está incorporado.

+0

'reduce' aunque todavía está en' functools'. – max

Cuestiones relacionadas