今天看自然語言處理這本書的時候,被這里的高級函數的概念吸引了,因為我覺得所有的函數都只是函數而已,是為了實現特定功能而實現的,不應該有高級,低級之分啊!不過了解之后,發現這幾個函數確實是有點高級,非常好用,所以在這里做一個簡單的總結。
1. Haskell:之前以為它是一個函數,其實它是一個統稱。Haskell 中的函數可以作為參數和回傳值傳來傳去,這樣的函數就被稱作高階函數。
2. map(function, list): 就是對list 中的每一個元素都調用function函數進行處理,返回一個新的列表
1 >>> d=[1,2,3] 2 >>> def f(s): 3 ... return s*100 4 ... 5 >>> map(f,d) 6 [100, 200, 300]
3. filter(function, list): 對list中的每一個元素都調用function進行判斷,返回滿足條件的元素列表。感覺它跟map很像,是的,但也有細微的差別,看下面代碼就知道了。
1 >>> filter(lambda x: x>2, d) 2 [3] 3 >>> filter(f, d) 4 [1, 2, 3] 5 >>> map(lambda x: x>2, d) 6 [False, False, True] 7 >>> def f1(s): 8 ... s=s*120 9 ... 10 >>> map(f1, d) 11 [None, None, None]
4. zip([iterable, ...])
zip()是Python的一個內建函數,它接受一系列可迭代的對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然后返回由這些tuples組成的list(列表)。若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。利用*號操作符,可以將list unzip(解壓)
1 >>> a = [1,2,3] 2 >>> b = [4,5,6] 3 >>> c = [4,5,6,7,8] 4 >>> zipped = zip(a,b) 5 [(1, 4), (2, 5), (3, 6)] 6 >>> zip(a,c) 7 [(1, 4), (2, 5), (3, 6)] 8 >>> zip(*zipped) 9 [(1, 2, 3), (4, 5, 6)]
5. enumerate(s):返回一個包含索引及索引處所在項目的配對。
1 >>> enumerate(d) 2 <enumerate object at 0x02873B98> 3 >>> list(enumerate(d)) 4 [(0, 1), (1, 2), (2, 3)]