map内置函数分析所得到的思路
生活随笔
收集整理的這篇文章主要介紹了
map内置函数分析所得到的思路
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
map:會根據提供的函數對指定序列做映射。
map(func, *iterables) --> map objectMake an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterable is exhausted."""根據提示,map有一個函數名參數還有個動態參數,意思是將可迭代的對象打散然后把每一個元素傳入函數名作為參數運行讓后將函數返回值作為新的值映射傳入的參數。
現在有一個列表
l1 = [1,2,3,4,5,6],現在需要生成[1, 4, 9, 16, 25, 36]這樣的列表,也就是每個元素平方:首先l1肯定是個可迭代的對象所有我們可以先構思成這樣:map(函數名,l1) l1會將每個元素傳入函數作為參數。所以我們這樣定義這個函數:
def func(x):return x**2#這樣l1每遍歷一個元素函數func都會返回這個元素的平方
#所以就寫成了這樣:
g = map(func,l1)
print(list(g)) #[1, 4, 9, 16, 25, 36]
接下來我們分析下map原理
在沒接觸map前,你會寫出下面代碼:
def func(x):l1 = []for i in x:i = i**2l1.append(i)return l1#我們定義了以上函數,當你輸入一個列表時會返回一個新列表每個元素是之前的平方
g=func([1,2,3,4,5)
print(g)#[1,4,8,16,25]
這樣確實實現了功能,但是如果我現在改變條件說新列表是原來每個元素的3次方,你又改成了這樣:
def func(x):l1 = []for i in x:i = i**3l1.append(i)return l1大家發現了沒,其實我改的要求就是 i = i**3這行代碼,其實我們可以把這變的條件作為函數,寫成i = foo(i),而fun1這個函數為我定義函數的參數傳進去,這樣我就只需改參數就能實現多個功能:
def func(foo,x):l1 = []
for i in x:
i = foo(i)
l1.append(i)
return l1
def foo(x):return x**2
print(func(foo,[1,2,3,4]))
大家會說你不是還是要定義另一個函數傳進去,這時匿名函數出來了
def func(foo,x):l1 = []for i in x:i = foo(i)l1.append(i)return l1 print(func(lambda x:x**2,[1,2,3,4])) print(func(lambda x:x**3,[1,2,3,4]))#這樣是不是無論你要我對元列表加減乘除平方或者替換我都只需要改變我傳入的函數名參數就行了
?
轉載于:https://www.cnblogs.com/Kingfan1993/p/9519348.html
總結
以上是生活随笔為你收集整理的map内置函数分析所得到的思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何修改Vue打包后文件的接口地址配置
- 下一篇: Linear_algebra_02_行列