1. 程式人生 > >Python學習筆記系列——高階函式(filter/sorted)

Python學習筆記系列——高階函式(filter/sorted)

一、filter

#filter()函式用於過濾序列。和map()類似,也接收一個函式和一個序列,把函式依次作用於每個元素,根據返回值是True還是False決定是否保留該元素。
#filter()函式返回的是一個Iterator,即惰性序列,所以要強迫filter()完成計算結果,需要用list()函式獲得所有結果並返回list。
def odd(n):
    return n%2==1
ms=list(filter(odd,[1,2,3,4,5,6,7,8,9,10])) #保留奇數
print(ms)

#一、過濾空字串
def not_empty(s):
    
return s and s.strip() ms=list(filter(not_empty,['Zc',' ','BOOM',None,'BLOG'])) print(ms) #二、生成範圍素數陣列 #構造一個從3開始的奇數序列 def _odd_iter(): n=1 while True: 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

上面這個用生成器寫素數陣列的,我這種菜雞是真的有點看不懂,沒思路。下面是找群裡王傑大佬給我寫了個簡單的:

def test(num):
    num_list = [True] * num
    num_list[0] = False
    for i in range(2, num+1):
        for j in range(i+i, num+1, i):
            num_list[j-1] = False
    return [x+1 for x in range(len(num_list)) if num_list[x]]

print(test(100))

 

二、sorted

#sorted()可以對list進行排序,還可以接收一個key()函式實現自定義排序.
#key指定的函式將作用於list的每一個元素上,並根據key函式返回的結果進行排序。
ms=sorted([35,-9,-20,23,2],key=abs)  #按絕對值大小排序

#預設情況下,對字串排序,是按照ASCII的大小來比較的
ms1=sorted(['boom','axure','Zero','Cat'])                     #['axure', 'boom', 'Cat', 'Zero']
ms2=sorted(['boom','axure','Zero','Cat'],key=str.upper)       #['Zero', 'Cat', 'boom', 'axure']

#反向排序,加引數reverse
ms3=sorted(['boom','axure','Zero','Cat'],key=str.upper,reverse=True)

 三、練習

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
#按照名字排序
def by_name(n):
    return n[0]
print(by_name(L))
L2 = sorted(L, key=by_name)
print(L2)

#按照成績降序
def by_score(n):
    return n[1]
L2 = sorted(L, key=by_score,reverse=True)
print(L2)