python的reduce的用法,python高階函數map reduce filter sorted_【Python入門】7.高階函數之 map( )、red

 2023-12-10 阅读 23 评论 0

摘要:目錄 高階函數 map( )函數 reduce( )函數 ?【練習】字符串轉為整數的函數實現 python的reduce的用法,filter( )函數 ?【應用】產生素數的函數實現 sorted( )函數 補充筆記 高階函數 Higher-order function,即高階函數。 map filter reduce。事實上,變量是可以指

目錄

高階函數

map( )函數

reduce( )函數

?【練習】字符串轉為整數的函數實現

python的reduce的用法,filter( )函數

?【應用】產生素數的函數實現

sorted( )函數

補充筆記

高階函數

Higher-order function,即高階函數。

map filter reduce。事實上,變量是可以指向函數的。>>>abs(-2)2>>>f?=?abs????????????????????????#f變量指向函數abs()>>>f(-2)2

而函數名也是變量。>>>abs?=?1>>>abs(-1)????????????????????????#TypeError:?'int'?object?is?not?callable,此時abs不再是函數,而是整數1注:由于abs函數實際上是定義在import builtins模塊中的,所以要讓修改abs變量的指向在其它模塊也生效,要用import builtins; builtins.abs = 10。

既然變量可以指向函數,那么函數也可以傳入函數和返回函數,這種函數就叫高階函數。

map( )函數

map( )是一種高階函數,它接收兩個參數,第一個是函數,第二個是Iterable,即可迭代對象。map( )將函數依次作用于Iterable的每個元素,并將結果以Iterator,迭代器的形式返回。這種方式類似構造出了數學中的映射過程。由于Iterator是惰性序列,可以用list( ) 將其轉化為list輸出。>>>list(map(str,[1,2,3,4,5,6]))??????????????????#str()可以將整數轉化為字符串['1',?'2',?'3',?'4',?'5',?'6']

我們還能用列表生成器得到同樣的結果,但要用到for語句:>>>b?=?[str(x)?for?x?in?[1,2,3,4,5,6]]

python predict函數、['1',?'2',?'3',?'4',?'5',?'6']

reduce( )函數

reduce( )函數同樣接收一個函數和一個Iterable兩個參數,不同的是所傳入的函數必須要接收兩個參數,而reduce是把函數作用的結果繼續與序列中下一個元素做累計計算。reduce(f,?[x1,?x2,?x3,?x4])?=?f(f(f(x1,?x2),?x3),?x4)

這個有什么用呢,舉個簡單的例子,可以把序列轉化為相應的整數顯示。>>>from?functools?import?reduce??????????????????#加入內置函數reduce>>>def?fn(x,?y):

...???return(x?*?10?+?y)

...>>>reduce(fn,?[1,?2,?3,?4,?5])12345

python中reduce()函數的用法,【練習】字符串轉為整數的函數實現from?functools?import?reduce

d={'0':?0,?'1':?1,?'2':?2,?'3':?3,?'4':?4,?'5':?5,?'6':?6,?'7':?7,?'8':?8,?'9':?9}def?str2int(s):

def?char2num(s):??????????????????????????#將字符串的每個字符轉化為對應的整數,并組成序列

return?d[s]????def?fn(x,?y):?????????????????????????????#將一個序列轉化為對應的整數

return?x?*?10?+?y

return?reduce(fn,map(char2num,s))

python reduce函數、輸出結果如下>>>str2int('0110234')110234

filter( )函數

filter,即過濾的意思,filter( )函數的作用是過濾序列。與上面兩個函數一樣,接收一個函數與一個序列,而在函數作用于序列的元素之后,根據返回值True或False來保留或移除該元素。如寫一個保留奇數的函數:>>>def?odd(n):

...????return?n?%?2?==?1...>>>list(filter(odd,[1,?2,?3,?4,?5,?6,?7,?8]))

[1,?3,?5,?7]

需要注意的是,filter( )函數返回的也是Iterator,惰性序列,需要用list( )來轉化才能直接顯示計算結果。

reduce python?【應用】產生素數的函數實現

(以下代碼轉自廖雪芳的官方網站)def?_odd_iter():?????????????????????????????#定義一個初始值為3,且不存在偶數的初始序列生成器

n?=?1

while?True:

n?=?n?+?2

yield?ndef?_not_divesible(n):???????????????????????#定義篩選函數,不是n的倍數則返回True

python filter函數、return?lambda?x?:?x?%?n?>?0def?primes():????????????????????????????????#定義一個初始值為2,

yield?2

it?=?_odd_iter()?????????????????????????#it為序列n的生成器,初始序列

while?True:

n?=?next(it)?????????????????????????#返回序列n的第一個值

yield?n

python mapreduce。it?=?filter(_not_divesible(n),?it)???#過濾序列中為n的倍數的值for?n?in?primes():???????????????????????????#for循環取值

if?n?<?100:??????????????????????????????#打印100以為的素數

print(n)????else:????????break

sorted( )函數

sort,分類、排序的意思。在Python總sorted( )函數可以將list排序。>>>sorted([5,?9,?-55,?90,?1])

[-55,?1,?5,?9,?90]

sort( )函數還能接收一個key函數來自定義排序,也就是先把傳入的函數作用于list,根據結果進行排序,把傳入的初始序列按照結果的順序進行排序。如接收一個abs( )函數>>>sorted([5,?9,?-55,?90,?1],?key?=?abs)

[1,?5,?9,?-55,?90]

還能加入第三個參數reverse=True,進行反向排序>>>sorted([5,?9,?-55,?90,?1],?key?=?abs,?reverse?=?True)

[90,?-55,?9,?5,?1]

補充筆記

補充幾個函數的用法,s.index('x')返回字符串中字符'x'的索引值;s.strip( )函數去除字符串首尾的空格或其他指定字符;s[::-1]把字符串s從尾到頭順序重新排列。

作者:三貝_

鏈接:https://www.jianshu.com/p/09d4284f33e1

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194335.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息