最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中三種高階函數(shù)(map,reduce,filter)詳解

 更新時(shí)間:2021年10月21日 09:40:43   作者:網(wǎng)名余先生  
在Python中,函數(shù)其實(shí)也是一種數(shù)據(jù)類型,今天重點(diǎn)給大家介紹python中三種高階函數(shù)(map,reduce,filter)的相關(guān)知識,感興趣的朋友一起看看吧
  • map(function,seq[,seq2]) 接收至少兩個(gè)參數(shù),基本作用為將傳入的函數(shù)依次作用到序列的每個(gè)元素,并且把結(jié)果作為新的序列 返回一個(gè)可迭代的map對象

function:函數(shù)對象

py2中可為None,作用等同于zip()
如:

py3中不可為None,None是不可調(diào)用、不可迭代對象

seq:可迭代對象,可以傳一個(gè)或多個(gè)

# 傳一個(gè):
def func(i):return i*2
print([i for i in map(func,[1,'2'])]) # [2,'22']

# 傳多個(gè)
def func2(x,y):return x+y
print([i for i in map(func2,[1,2],[2,3])]) # [3, 5]


結(jié)合圖 map()的作用可以理解為:

# 傳一個(gè)時(shí)
seq=[1,'2']
result=[]
def func(x):return x*2
for i in seq:
	result.append(func(i))
print(result)
# 傳多個(gè)時(shí)
seq1=[1,2]
seq2=[2,3]
result=[]
def func2(x,y):return x+y
for x,y in zip(seq1,seq2):
	result.append(func2(x,y))
print(result)

當(dāng)多個(gè)可迭代對象的長度不一致時(shí),map只會取最短組合;同時(shí)每個(gè)可迭代對象相應(yīng)位置參數(shù)類型需一致!(除了py支持的"str"*n)
如:

seq1=[1,2]
seq2=[2,3,4]
result=[]
def func2(x,y):return x+y
for x,y in zip(seq1,seq2):
	result.append(func2(x,y))
print(result) #[3,5]

map的function參數(shù)可以是lambda對象
如:

print([i for i in map(lambda x, y, z: (f'x:{x}', f'y:{y}', f'z:{z}'), [1, 2, 3, 4, 5], [1, 2, 3, 4], [1, 2])])
# [('x:1', 'y:1', 'z:1'), ('x:2', 'y:2', 'z:2')]
  • filter(function, seq)接收兩個(gè)參數(shù),基本作用是對可迭代對象中的元素進(jìn)行過濾;并返回一個(gè)新的可迭代filter對象

function:函數(shù)對象,返回值必須是個(gè)boolean值

seq:可迭代對象

如:獲取所有小寫的字符串

	print([i for i in filter(lambda k: str(k).islower(), ['Java', 'Python', 'js', 'php'])])
 	# ['js', 'php']

等同于:

_list=['Java','Python','js','php']
result=[]
def is_lower(str_obj):return str(str_obj).islower()
for i in _list:
	if is_lower(i):
		result.append(i)
print(result)
  • reduce(function,seq[,initial])接收三個(gè)參數(shù),基本作用為對序列進(jìn)行累積;并返回結(jié)果。python3中reduce需從functools模塊導(dǎo)入

function:函數(shù)對象

seq: 可迭代對象

initial:初始值,選填參數(shù)

工作過程是:
reduce在迭代seq的過程中,第一次先把 seq的前兩個(gè)元素傳給 函數(shù)function,函數(shù)處理后,再把得到的結(jié)果和第三個(gè)元素作為兩個(gè)參數(shù)再次傳遞給函數(shù)function, 函數(shù)處理后得到的結(jié)果又和第四個(gè)元素作為兩個(gè)參數(shù)傳給函數(shù)function 依次類推,直至seq被迭代完。 如果傳入了 initial 值, 那么首次傳遞的兩個(gè)元素則是 initial值 和 第一個(gè)元素。經(jīng)過一次次累計(jì)計(jì)算之后得到一個(gè)匯總返回值。
如:求和

def _add(x, y):
	return x + y
	
# 指定initial
print(reduce(_add,[1],3)) # 4
print(reduce(_add, [1, 2], 2)) # 5
# 不指定initial
print(reduce(_add, [1, 2])) # 3
print(reduce(_add,[1])) # 1
print(reduce(_add, [1, 2, 3, 4, 5])) # 15

等同于:

def fact(n):
	if n == 1:
		return 1
	return n + fact(n - 1)

print(fact(5)) # 15

借助lambda:

print(reduce(lambda x, y: x + y, range(1, 6))) # 15

結(jié)合實(shí)際:假設(shè)我們要取出字典的key中包含某個(gè)關(guān)鍵字的鍵值對
如:取出下列字典中key值包含ECU的鍵值對

key = "ECU"
file_dict = {'value': 'name',
			 '刷寫ECU': 'burn_ecu_version=ecu_name,burn_package_url,(flash_method)',
			 'BD升級ECU': 'bd_ecu_version=ecu_name,doip_package_url',
			 '設(shè)置證書': 'set_ecu_certs=set_method,ecu_name,(bench_name)', 'x': {"ECU": "xx"}}

方法一:引入其他變量

result = {}
for k, v in file_dict.items():
	if key in k:
		result[k] = v
print(result) 
# {'刷寫ECU': 'burn_ecu_version=ecu_name,burn_package_url,(flash_method)', 'BD升級ECU': 'bd_ecu_version=ecu_name,doip_package_url'}

方法二:使用推導(dǎo)式

print(dict((k, v) for k, v in file_dict.items() if key in k))

方法三:reduce+map+filter

from functools import reduce
print(reduce(lambda x, y: x.update(y) or x,
			 [i for i in map(lambda k: {k: file_dict[k]}, filter(lambda k: key in k, file_dict))]))

細(xì)心的同學(xué)肯定發(fā)現(xiàn)無法過濾出嵌套key。這是弊端
解決方案:遞歸

class GetResource:
	def __init__(self):
		self.result = {}

	def get_resource(self, key_str, data):

		"""
		從dict中獲取包含指定key的k,v
		:param key_str:
		:param data:
		:return:
		"""

		if not isinstance(data, (dict, list, tuple)):
			pass
		elif isinstance(data, (list, tuple)):
			for index in data:
				self.get_resource(key_str, index)
		elif isinstance(data, dict):
			for k, v in data.items():
				if isinstance(v, str):
					if key_str in k:
						self.result[k] = v
				else:
					self.get_resource(key_str, v)
		return self.result


print(GetResource().get_resource(key, file_dict))
# {'刷寫ECU': 'burn_ecu_version=ecu_name,burn_package_url,(flash_method)', 'BD升級ECU': 'bd_ecu_version=ecu_name,doip_package_url', 'ECU': 'xx'}

到此這篇關(guān)于python中三種高階函數(shù)(map,reduce,filter)的文章就介紹到這了,更多相關(guān)python高階函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?urllib?入門使用詳細(xì)教程

    Python?urllib?入門使用詳細(xì)教程

    urllib?庫,它是?Python?內(nèi)置的?HTTP?請求庫,不需要額外安裝即可使用,這篇文章主要介紹了Python?urllib?入門使用,需要的朋友可以參考下
    2022-11-11
  • 關(guān)于如何把Python對象存儲為文件的方法詳解

    關(guān)于如何把Python對象存儲為文件的方法詳解

    本文將給大家介紹如何把Python對象存儲為文件的方法,pickle可以用二進(jìn)制表示并讀寫python數(shù)據(jù),這個(gè)功能并不安全,如果把一個(gè)pickle暴露給別人,有被植入惡意程序的風(fēng)險(xiǎn),文中通過代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • MATLAB中text函數(shù)使用的語法與示例代碼

    MATLAB中text函數(shù)使用的語法與示例代碼

    text函數(shù)的功能是向數(shù)據(jù)點(diǎn)添加文本說明,下面這篇文章主要給大家介紹了關(guān)于MATLAB中text函數(shù)使用的語法與示例的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式

    keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式

    這篇文章主要介紹了keras 讀取多標(biāo)簽圖像數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 已安裝tensorflow-gpu,但keras無法使用GPU加速的解決

    已安裝tensorflow-gpu,但keras無法使用GPU加速的解決

    今天小編就為大家分享一篇已安裝tensorflow-gpu,但keras無法使用GPU加速的解決,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • ChatGLM-6B+LangChain環(huán)境部署與使用實(shí)戰(zhàn)

    ChatGLM-6B+LangChain環(huán)境部署與使用實(shí)戰(zhàn)

    這篇文章主要介紹了ChatGLM-6B+LangChain環(huán)境部署與使用方法,結(jié)合實(shí)例形式詳細(xì)分析了ChatGLM-6B+LangChain環(huán)境部署相關(guān)步驟、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2023-07-07
  • python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類

    python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類

    這篇文章主要介紹了python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類,幫助大家更好的利用python進(jìn)行深度學(xué)習(xí),感興趣的朋友可以了解下
    2021-05-05
  • 深入詳解Python中dotted庫的使用

    深入詳解Python中dotted庫的使用

    Python的dotted庫提供了一種便捷的方式來處理嵌套字典和列表,允許通過點(diǎn)分隔的路徑字符串來訪問和設(shè)置嵌套結(jié)構(gòu)中的數(shù)據(jù),下面我們就來看看它的具體使用
    2019-04-04
  • 淺談python之新式類

    淺談python之新式類

    這篇文章主要介紹了淺談python之新式類,詳細(xì)的介紹了如何使用新式類和經(jīng)典類的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 基于PyQt6編寫一個(gè)串口調(diào)試助手

    基于PyQt6編寫一個(gè)串口調(diào)試助手

    這篇文章主要為大家詳細(xì)介紹了如何基于PyQt6編寫一個(gè)串口調(diào)試助手,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12

最新評論

四平市| 黄梅县| 东方市| 许昌市| 布拖县| 新乡市| 龙里县| 吴旗县| 肥城市| 讷河市| 东丽区| 苍溪县| 达州市| 河北省| 吉木乃县| 兴义市| 岳阳市| 仙居县| 武功县| 普兰店市| 丁青县| 广西| 新化县| 和田县| 漠河县| 中方县| 进贤县| 章丘市| 志丹县| 绍兴县| 太仆寺旗| 滕州市| 阿克苏市| 高青县| 大关县| 东山县| 顺昌县| 屏边| 拉萨市| 镇康县| 东丽区|