2010-01-19 48 views
9

我見過一些使用列表理解和映射縮減的優雅python片段。你能分享一些這些代碼或一個網站嗎?Python函數式編程片段

謝謝。

+10

好問題,但**社區wiki **! – 2010-01-19 12:26:09

回答

2

這裏是快速排序:

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 

這一個是尋找從1整數中的缺失數量的編程謎題的解決方案到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不是lisp。請不要試圖讓它看起來那樣。它只是減少了python最大的優勢之一,這是後來它的可讀性和可理解性。

如果您喜歡函數式編程,請學習Haskell,MLF#。你會驚訝於這些語言提供了什麼(純功能開始)。

+0

我同意ML--經常被忽視 – zebrabox 2010-01-19 14:39:47

3

在編寫功能風格的python時要小心。唯一的理由是爲了可讀性。如果算法在功能上比命令更優雅地表達,並且不會導致性能問題(通常不會),那麼請繼續前進。但是,python並沒有優化尾遞歸,並且有一個固定的1000遞歸限制,所以你通常不能做O(n)遞歸,只有O(log(n))。

另外,reduce()在python 3中被刪除,理由很充分(http://www.artima.com/weblogs/viewpost.jsp?thread=98196)。減少的大多數非平凡使用作爲正常循環而不是減少可讀性更高,並且已經內置sum()。

+0

雖然'reduce'仍然在'functools'中。 – max 2012-10-10 21:29:00