【廖雪峰老師python教程】——filter/sorted
filter
Python內建的filter()
函式用於過濾序列。
和map()
類似,filter()
也接收一個函式和一個序列。和map()
不同的是,filter()
把傳入的函式依次作用於每個元素,
然後根據返回值是True
還是False
決定保留還是丟棄該元素
。
注意到
filter()
函式返回的是一個Iterator
,也就是一個惰性序列,所以要強迫filter()
完成計算結果,需要用list()
函式獲得所有結果並返回list。
看看素數構造的過程:
# 用生成器產生一個奇數序列——無窮數列 def odd(): n = 3 while True: yield n n = n + 2 # 篩選函式函式 def is_divide(n): return lambda x:x%n > 0 # 利用篩選器構造篩選函式——函式結果為素數序列 def primes(): yield 2 it = odd() while True: n = next(it) yield n it = filter(is_divide(n),it) # 素數序列列印 for i in primes(): if(i < 100): print(i) else: break# 由於primes是無窮數列,記得加上else break 作為終止條件。
- 這裡的篩選函式,lambda方法記一記,直接將it轉化為lambda中的引數
sorted
-
Python內建的
sorted()
函式可以對list進行排序 -
sorted()
函式也是一個高階函式,它還可以接收一個key
函式來實現自定義的排序 -
要進行反向排序,不必改動key函式,可以傳入第三個引數
reverse=True
# 姓名成績序列 L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] # key函式定義 def name(s): return s[0] def score(s): return s[1] # 排序[取L中的元素針對key函式方法的返回結果進行排序——>還原] print(sorted(L,key=name)) print(sorted(L,key=score))