1. map()函式
map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。
def f(x):
return x * x
l = map(f,[1,2,3,4,5])
list(l)
[1,4,9,16,25]
2. reduce()函式
reduce把乙個函式作用在乙個序列[x1, x2, x3, ...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算。
其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
def fn(x, y):
return x * 10 + y
reduce(fn, [1, 2, 3, 4, 5])
12345
map和reduce 結合使用把str轉換為int的函式
from functools import reduce
digits =
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return digits[s]
return reduce(fn, map(char2num, s))
filter()函式用於過濾序列
filter()也接收乙個函式和乙個序列。和map()不同的是,filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素。注意到filter()函式返回的是乙個iterator,也就是乙個惰性序列,所以要強迫filter()完成計算結果,需要用list()函式獲得所有結果並返回list。
把乙個序列中的空字串刪掉:
def not_empty(s):
return s and s.strip()
list(filter(not_empty,['a','','b',none,' ']))
結果:['a','b','c']
用filter求素數
先構造乙個從3開始的奇數序列
def _old_iter():
n=1while ture:
n = n+2
yield n
然後定義乙個篩選函式:
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter() # 初始序列
while true:
n = next(it) # 返回序列的第乙個數
yield n
it = filter(_not_divisible(n), it) # 構造新序列
列印1000以內的素數:
for n in primes():
if n < 1000:
print(n)
else:
break
3. sorted 函式
python內建的sorted()函式就可以對list進行排序
sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
sorted()函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序
sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
sorted(['bob', 'about', 'zoo', 'credit'])
['credit', 'zoo', 'about', 'bob']
預設情況下,對字串排序,是按照ascii的大小比較的,由於'z' < 'a',結果,大寫字母z會排在小寫字母a的前面
sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower) 忽略大小寫排序
['about', 'bob', 'credit', 'zoo']
要進行反向排序,不必改動key函式,可以傳入第三個引數reverse=true
sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower, reverse=true)
['zoo', 'credit', 'bob', 'about']
幾個高階函式
高階函式 把函式當成引數進行傳遞的函式。1.sorted iterable,key,reverse 其中的key是乙個函式引數。sorted list1,key 函式 通過key這個函式指定規則 dict1 對dict1按分數排序 sorted dict1 此時按建排序 result sorted ...
重溫這幾個屌爆的Python技巧!
我已經使用python程式設計有多年了,即使今天我仍然驚奇於這種語言所能讓 表現出的整潔和對dry程式設計原則的適用。這些年來的經歷讓我學到了很多的小技巧和知識,大多數是通過閱讀很流行的開源軟體,如django,flask,requests中獲得的。下面我挑選出的這幾個技巧常常會被人們忽略,但它們在...
高階函式與Python3幾個內建函式
這篇文章簡談高階函式與python3中幾個內建函式的例題 高階函式就是能接受函式作引數的函式。我們知道變數可以指向函式,而函式的引數可以接受變數,乙個函式可以接收另乙個函式作為引數,能接受函式作為引數的函式就是高階函式。比如說,乙個簡單的高階函式 def shu 1 print 宇宙之大 def s...