Python3之三個內建高階函式map、filter、sorted
什麼是高階函式?
- 函式接收一個或多個函式作為引數傳入
- 函式返回一個函式
只要滿足以上一條的函式就是高階函式了
map函式
map(function, *iterable) 返回一個可迭代物件,此可迭代物件用函式function對可迭代物件iterable中的每一個元素作為引數計算後得到新的資料。
舉個栗子就懂了,文字敘述有點繞
如:求1-9的每個元素的平方:
def power(x):
return x ** 2
for x in map(power, range(1, 10)):
print(x, end=' ') # 1 4 9 16 ... 81
map(power, range(1, 10))先看這條語句,其中power是上邊的函式名,range不用說了,是一個可迭代物件。那麼它執行的流程是什麼呢?
- 先拿出 1 傳給power,然後return 1^2 -> 1
- 再拿出 2 傳給power,然後return 2^2 -> 4
- 再拿出 3 傳給power,然後return 3^2 -> 9
- …
- 最後拿出 9 傳給power,然後return 9^2 -> 81
總起來就是說可以這麼理解:可迭代物件有多少個就呼叫多少次對應的函式
配個debug圖:
可迭代物件不一定只有一個,但必須和函式形參個數相同,再舉個栗子:
如:#生成一個可迭代物件,可以提供:1^4,2^3,3^2,4^1
def mypow(x, y):
return x ** y
for i in map(mypow, [1, 2, 3, 4], (4, 3, 2, 1)):
print(i, end=' ')
filter函式
filter(function, iterable)
filter函式的作用:
- 篩選可迭代物件iterable中的資料,返回一個可迭代物件,此可迭代物件只返回iterable中符合條件的資料
- function將對iterable中提供的每個資料進行布林求值,True則保留,否則丟棄
舉個栗子:以列表的形式列印1-10之間的奇數
def isodd(x):
return x % 2 == 1
L = list(filter(isodd, range(10)))
print('L=', L) # L= [1, 3, 5, 7, 9]
filter(isodd, range(10)) 先看這條,執行過程同map一樣,只不過filter返回的是True或False
如果是map返回是什麼呢?
L= [False, True, False, True, False, True, False, True, False, True]
filter可以瞭解為一個過濾器,如果返回的是True,就保留讓它返回True的這個資料,否則的話就丟棄
再舉個栗子:求1-100之間的素數(用filter實現)
def isprime(x):
if x < 2:
return False
for i in range(2, x):
if x % i == 0: # 一旦整除,x一定不是素數
return False
return True
L = list(filter(isprime, range(100)))
print('L=', L)
# 結果:L= [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
sorted函式
sorted函式的作用:
將原可迭代物件的資料進行排序,生成排序後的列表
函式的引數格式:
sorted(iterable, key=None, reverse=False)
引數說明:
- iterable 可迭代物件
key 函式是用來提供一個值,將這個值作為排序的依據,如果不給出這個key函式,則用原資料的值進行比較和排序
舉幾個栗子:
>>> L = [5 , -2, -4, 0, 3, 1]
>>> L2 = sorted(L)
>>> L2
[-4, -2, 0, 1, 3, 5]
>>> L3 = sorted(L, reverse=False)
>>> L3
[-4, -2, 0, 1, 3, 5]
>>> L4 = sorted(L, reverse=True)
>>> L4
[5, 3, 1, 0, -2, -4]
以上栗子解釋reverse的作用:預設為False升序,可以不寫,如果是True則為降序
>>> L5 = sorted(L, key=abs)
>>> L5
[0, 1, -2, 3, -4, 5]
以上栗子解釋key值使用內建函式,abs是絕對值,也就是按絕對值的大小來排序,key的函式也可以自定義
如:
按字串的反序排序
names = ['Tom', 'Jerry', 'Spike', 'Tyke']
def mysorted(L): # 依次傳入name的值
return L[::-1] # 將name字串反轉
print(sorted(names, key = mysorted))
# 結果: ['Spike', 'Tyke', 'Tom', 'Jerry']
提示:反轉後的names列表是:
names = [‘Tyke’, ‘Spike’, ‘Jerry’, ‘Tom’] ,然後按照這個排序
本節完
相關文章
- javascript高階函式---filter---map---reduceJavaScript函式Filter
- JavaScript(1)高階函式filter、map、reduceJavaScript函式Filter
- 理解Swift高階函式之map, filter, reduceSwift函式Filter
- Python3基礎-特別函式(map filter partial reduces sorted)例項學習Python函式Filter
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- Python中常用的幾個內建方法(max()/min()、filter()、map()、sorted、reduce())PythonFilter
- 函式進階· 第3篇《常用內建函式filter()、map()、zip(),怎麼用的呢?》函式Filter
- python內建函式——sortedPython函式
- python高階內建函式Python函式
- 內建函式sorted的10個小tips函式
- 12.4、python內建函式—sortedPython函式
- python之高階函式map,reduce,filter用法Python函式Filter
- Python5個內建高階函式的使用Python函式
- Array高階函式reduce&filter函式Filter
- python內建函式 map/reducePython函式
- python常用函式進階(2)之map,filter,reduce,zipPython函式Filter
- 自定義生成器函式模擬Python內建函式filter()函式PythonFilter
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 學習javaScript必知必會(3)~陣列(陣列建立,for...in遍歷,輔助函式,高階函式filter、map、reduce)JavaScript陣列函式Filter
- python 66個內建函式Python函式
- Python 函式進階-高階函式Python函式
- Kotlin進階(二)中綴、內聯、高階函式Kotlin函式
- 高階函式函式
- 從高階函式--->高階元件函式元件
- 幾個重要的內建函式函式
- 內建函式函式
- Kotlin 函式6 - 高階函式Kotlin函式
- Kotlin高階函式Kotlin函式
- oracle 高階函式Oracle函式
- python高階函式Python函式
- 函式高階玩法函式
- Javascript 高階函式JavaScript函式
- webgl內建函式--通用函式Web函式
- Kotlin——高階篇(二):高階函式詳解與標準的高階函式使用Kotlin函式
- JMeter36個內建函式及11個新增函式介紹JMeter函式
- hive內建函式Hive函式
- MySQL 內建函式MySql函式
- js內建函式JS函式