1. 程式人生 > >【廖雪峰老師python教程】——filter/sorted

【廖雪峰老師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))