亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python中的lambda和apply、map的用法

系統 2056 0

1 lambda

lambda原型為:lambda 參數:操作(參數)

lambda函數也叫匿名函數,即沒有具體名稱的函數,它允許快速定義單行函數,可以用在任何需要函數的地方。這區別于def定義的函數。

lambda與def的區別:

1)def創建的方法是有名稱的,而lambda沒有。

2)lambda會返回一個函數對象,但這個對象不會賦給一個標識符,而def則會把函數對象賦值給一個變量(函數名)。

3)lambda只是一個表達式,而def則是一個語句。

4)lambda表達式” : “后面,只能有一個表達式,def則可以有多個。

5)像if或for或print等語句不能用于lambda中,def可以。

6)lambda一般用來定義簡單的函數,而def可以定義復雜的函數。

1.1?舉最簡單的例子

            
              # 單個參數的:
g = lambda x: x ** 2
print(g(3))
"""
9
"""

# 多個參數的:
g = lambda x, y, z: (x + y) ** z
print(g(1, 2, 2))
"""
9
"""
            
          

1.2 再舉一個普通的例子

將一個 list 里的每個元素都平方:

            
              map(lambda x: x * x, [y for y in range(10)])
            
          

這個寫法要好過

            
              def sq(x):
    return x * x


map(sq, [y for y in range(10)])
            
          

因為后者多定義了一個(污染環境的)函數,尤其如果這個函數只會使用一次的話。

進一步講,匿名函數本質上就是一個函數,它所抽象出來的東西是一組運算。這是什么意思呢?類比

            
              a = [1, 2, 3]
            
          

            
              f = lambda x : x + 1
            
          

我們會發現,等號右邊的東西完全可以脫離等號左邊的東西而存在,等號左邊的名字只是右邊之實體的標識符。如果能習慣 [1, 2, 3] 單獨存在,那么 lambda x : x + 1 也能單獨存在其實也就不難理解了,它的意義就是給「某個數加一」這一運算本身。

2 map

現在回頭來看 map() 函數,它可以將一個函數映射到一個可枚舉類型上面。沿用上面給出的 a 和 f,可以寫

            
              map(f, a)
            
          

也就是將函數 f 依次套用在 a 的每一個元素上面,獲得結果 [2, 3, 4]。現在用 lambda 表達式來替換 f,就變成:

            
              map(lambda x: x + 1, [1, 2, 3])
            
          

會不會覺得現在很一目了然了?尤其是類比

            
              a = [1, 2, 3]
r = []
for each in a:
    r.append(each + 1)
            
          

3 Apply

Python中apply函數的格式為:

apply(func,*args,**kwargs)

當然,func可以是匿名函數。

用途:當一個函數的參數存在于一個元組或者一個字典中時,用來間接的調用這個函數,并將元組或者字典中的參數按照順序傳遞給參數

解析:args是一個包含按照函數所需參數傳遞的位置參數的一個元組,簡單來說,假如A函數的函數位置為 A(a=1,b=2),那么這個元組中就必須嚴格按照這個參數的位置順序進行傳遞(a=3,b=4),而不能是(b=4,a=3)這樣的順序。kwargs是一個包含關鍵字參數的字典,而其中args如果不傳遞,kwargs需要傳遞,則必須在args的位置留空。

apply的返回值就是函數func函數的返回值。

3.1 舉例

            
              from past.builtins import apply


def function(a, b):
    print(a, b)


apply(function, 'good', 'better')
apply(function, 2, 3 + 6)
apply(function, ('good',), {'b': 'better'})
            
          

運行結果:

            
              good better
2 9
('good',) {'b': 'better'}
            
          

3.2 下面的例子是DataFrame中apply的用法

            
              #函數應用和映射
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon'])
print(df)
"""
               b         d         e
utah   -0.667969  1.974801  0.738890
ohio   -0.896774 -0.790914  0.474183
texas   0.043476  0.890176 -0.662676
oregon  0.701109 -2.238288 -0.154442
"""
 
#將函數應用到由各列或行形成的一維數組上。DataFrame的apply方法可以實現此功能
f=lambda x:x.max()-x.min()
#默認情況下會以列為單位,分別對列應用函數
t1=df.apply(f)
print(t1)
t2=df.apply(f,axis=1)
print(t2)
 
"""
b    1.597883
d    4.213089
e    1.401566
dtype: float64
utah      2.642770
ohio      1.370957
texas     1.552852
oregon    2.939397
dtype: float64
"""
 
#除標量外,傳遞給apply的函數還可以返回由多個值組成的Series
def f(x):
    return pd.Series([x.min(),x.max()],index=['min','max'])
t3=df.apply(f)
#從運行的結果可以看出,按列調用的順序,調用函數運行的結果在右邊依次追加
print(t3)
 
"""
            b         d         e
min -0.896774 -2.238288 -0.662676
max  0.701109  1.974801  0.738890
"""
 
#元素級的python函數,將函數應用到每一個元素
#將DataFrame中的各個浮點值保留兩位小數
f=lambda x: '%.2f'%x
t3=df.applymap(f)
print(t3)
"""
            b      d      e
utah    -0.67   1.97   0.74
ohio    -0.90  -0.79   0.47
texas    0.04   0.89  -0.66
oregon   0.70  -2.24  -0.15
"""
 
#注意,之所以這里用map,是因為Series有一個元素級函數的map方法。而dataframe只有applymap。
t4=df['e'].map(f)
print(t4)
 
"""
utah     0.74
ohio     0.47
texas   -0.66
oregon  -0.15
"""
            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 青青青国产在线 | 亚洲高清日韩精品第一区 | 免费一级毛片在线播放视频 | 国内精品视频 | 中文字幕天堂久久精品 | 毛片大全网站 | 日韩毛片在线免费观看 | 五月综合视频 | 黄色免费网站在线观看 | 中国精品白嫩bbwbbw | 桃色婷婷| 国产做国产爱免费视频 | 亚洲天堂久久 | 精品牛牛影视久久精品 | 香蕉色香蕉在线视频 | 久久久久伊人 | 中国免费一级毛片 | 亚洲一区二区中文 | 青青青青啪视频在线观看 | 人人爱人人草 | 国产伦精品一区二区三区无广告 | 国产精品第一页爽爽影院 | 羞羞视频免费网站在线 | a毛片在线观看 | 日日操操 | 欧美日韩性视频在线 | 日本不卡视频在线观看 | 无毒a网| 国模无水印一区二区三区 | 成年人看的黄色 | 国产欧美久久久精品 | 国产成人亚洲精品91专区手机 | 国产精品u任我爽爆在线播放 | 精品精品国产高清a毛片牛牛 | 最新毛片久热97免费精品视频 | 日韩国产精品欧美一区二区 | 国产精品国产自线拍手机观看 | 国产精品视频全国免费观看 | 狠狠色噜噜狠狠狠狠2018 | 青青国产成人久久激情911 | 手机看片福利盒子久久 |