Python 列表映射后的平均值

本篇閱讀的代碼片段來自于30-seconds-of-python。
1、average_by
def average_by(lst, fn=lambda x: x):
return sum(map(fn, lst), 0.0) / len(lst)
# EXAMPLES
average_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda x: x['n']) # 5.0
該函數(shù)用于在列表中求取平均數(shù)。該代碼片段中主要使用了lambda表達式和map函數(shù)。該函數(shù)的主要邏輯是使用lambda表達式和map函數(shù)提取由待計算的數(shù)值組成的迭代器,然后使用sum函數(shù)計算列表的和,再除以列表長度。
2、lambda表達式
形如lambda parameters: expression的表達式可以創(chuàng)建一個匿名函數(shù)。在該代碼片段中,lambda表達式出現(xiàn)在函數(shù)average_by的參數(shù)定義中,作為一個參數(shù)傳給了fn。因此在average_by函數(shù)體中fn作為剛剛在參數(shù)中定義的函數(shù)發(fā)揮作用。
函數(shù)average_by的默認參數(shù)中的lambda表達式是一個直接返回輸入?yún)?shù)的函數(shù)。在例子中,向average_by傳入的匿名函數(shù)返回字典中key值為n項的值。
3、map函數(shù)
map函數(shù)是Python內(nèi)置的一個高階函數(shù),這個函數(shù)很有意思,它的參數(shù)是一個函數(shù)以及一個可迭代對象。它會返回一個迭代器,這個迭代器會將參數(shù)中的函數(shù)應用在參數(shù)中可迭代對象上。
4、其他類似函數(shù)
在30-seconds-of-python中還有一些類似的代碼片段。在理解了average_by函數(shù)之后,這些都很容理解。
4.1 max_by
def max_by(lst, fn):
return max(map(fn, lst))
# EXAMPLES
max_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda v : v['n']) # 8
4.2 min_by
def min_by(lst, fn):
return min(map(fn, lst))
# EXAMPLES
min_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda v : v['n']) # 2
4.3 sum_by
def sum_by(lst, fn):
return sum(map(fn, lst))
# EXAMPLES
sum_by([{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }], lambda v : v['n']) # 20
到此這篇關于Python 列表映射后的平均值的文章就介紹到這了,更多相關Python 列表映射內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
關注官方微信