一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類(lèi)導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python map比f(wàn)or循環(huán)快在哪

python map比f(wàn)or循環(huán)快在哪

2020-09-22 00:01Sight Tech. Python

這篇文章主要介紹了python 為什么map比f(wàn)or循環(huán)快,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

實(shí)驗(yàn)結(jié)論

  • 如果需要在循環(huán)結(jié)束后獲得結(jié)果,推薦列表解析;
  • 如果不需要結(jié)果,直接使用for循環(huán), 列表解析可以備選;
  • 除了追求代碼優(yōu)雅和特定規(guī)定情境,不建議使用map

如果不需要返回結(jié)果

這里有三個(gè)process, 每個(gè)任務(wù)將通過(guò)增加循環(huán)提高時(shí)間復(fù)雜度

	def process1(val, type=None):
	 chr(val % 123)

	def process2(val, type):
	 if type == "list":
	  [process1(_) for _ in range(val)]
	 elif type == "for":
	  for _ in range(val):
	   process1(_)
	 elif type == "map":
	  list(map(lambda _: process1(_), range(val)))

	def process3(val, type):
	 if type == "list":
	  [process2(_, type) for _ in range(val)]
	 elif type == "for":
	  for _ in range(val):
	   process2(_, type)
	 elif type == "map":
	  list(map(lambda _: process2(_, type), range(val)))

然后通過(guò)三種循環(huán)方式,去依次執(zhí)行三種任務(wù)

	def list_comp():
	 [process1(i, "list") for i in range(length)]
	 # [process2(i, "list") for i in range(length)]
	 # [process3(i, "list") for i in range(length)]

	def for_loop():
	 for i in range(length):
	  process1(i, "for")
	  # process2(i, "for")
	  # process3(i, "for")

	def map_exp():
	 list(map(lambda v: process1(v, "map"), range(length)))
	 # list(map(lambda v: process2(v, "map"), range(length)))
	 # list(map(lambda v: process3(v, "map"), range(length)))

python map比f(wàn)or循環(huán)快在哪

python map比f(wàn)or循環(huán)快在哪

python map比f(wàn)or循環(huán)快在哪

從上述的圖像中,可以直觀的看到, 隨著任務(wù)復(fù)雜度的提高以及數(shù)據(jù)量的增大,每個(gè)循環(huán)完成需要的時(shí)間也在增加,
但是map方式花費(fèi)的時(shí)間明顯比其他兩種要更多。 所以在不需要返回處理結(jié)果時(shí),選擇標(biāo)準(zhǔn)for或者列表解析都可以。

因?yàn)闃?biāo)準(zhǔn)for循環(huán)和列表解析方式在循環(huán)任務(wù)復(fù)雜度逐漸提高的情況下,處理時(shí)間基本沒(méi)有差異。

需要返回結(jié)果

這里有三個(gè)task, 每個(gè)任務(wù)將通過(guò)增加循環(huán)提高時(shí)間復(fù)雜度

	def task1(val, type=None):
	 return chr(val % 123)

	def task2(val, type):
	 if type == "list":
	  return [task1(_) for _ in range(val)]
	 elif type == "for":
	  res = list()
	  for _ in range(val):
	   res.append(task1(_))
	  return res
	 elif type == "map":
	  return list(map(lambda _: task1(_), range(val)))

	def task3(val, type):
	 if type == "list":
	  return [task2(_, type) for _ in range(val)]
	 elif type == "for":
	  res = list()
	  for _ in range(val):
	   res.append(task2(_, type))
	  return res
	 elif type == "map":
	  return list(map(lambda _: task2(_, type), range(val)))

然后通過(guò)三種循環(huán)方式,去依次執(zhí)行三種任務(wù)

	def list_comp():
	 # return [task1(i, "list") for i in range(length)]
	 return [task2(i, "list") for i in range(length)]
	 # return [task3(i, "list") for i in range(length)]

	def for_loop():
	 res = list()
	 for i in range(length):
	  # res.append(task1(i, "for"))
	  res.append(task2(i, "for"))
	  # res.append(task3(i, "for"))
	 return res

	def map_exp():
	 # return list(map(lambda v: task1(v, "map"), range(length)))
	 return list(map(lambda v: task2(v, "map"), range(length)))
	 # return list(map(lambda v: task3(v, "map"), range(length)))

python map比f(wàn)or循環(huán)快在哪

python map比f(wàn)or循環(huán)快在哪

python map比f(wàn)or循環(huán)快在哪

從上述的圖像中,可以直觀的看到, 隨著任務(wù)復(fù)雜度的提高以及數(shù)據(jù)量的增大,每個(gè)循環(huán)完成需要的時(shí)間也在增加,
但是明顯看出, 使用list_comp列表解析在, 循環(huán)需要返回處理結(jié)果的每次任務(wù)中都表現(xiàn)的很好,基本快于其他兩種迭代方式。

而標(biāo)準(zhǔn)for循環(huán)和map方式在循環(huán)任務(wù)復(fù)雜度逐漸提高的情況下,處理時(shí)間基本沒(méi)有差異。

為什么普遍認(rèn)為map比f(wàn)or快?

我認(rèn)為可能跟處理的數(shù)據(jù)量有關(guān)系,大部分場(chǎng)景下,使用者只測(cè)試了少量的數(shù)據(jù)(100W以下,比如這篇文章,就是數(shù)據(jù)量比較少,導(dǎo)致速度的區(qū)別不明顯),在少量的數(shù)據(jù)集下,我們確實(shí)看到了map方式比f(wàn)or循環(huán)快,甚至有時(shí)候比列表解析還稍微快一點(diǎn),但是當(dāng)我們逐漸把數(shù)據(jù)量增加原來(lái)的100倍,這時(shí)候差距的凸現(xiàn)出來(lái)了。

python map比f(wàn)or循環(huán)快在哪

如上圖,在小數(shù)據(jù)集上(100W-1KW之間), 三者消耗的時(shí)間差不多相等,但是用map方式遍歷和處理,還是有一定的加速優(yōu)勢(shì)。
具體實(shí)驗(yàn)代碼可以通過(guò)Github獲得

以上就是python 為什么map比f(wàn)or循環(huán)快的詳細(xì)內(nèi)容,更多關(guān)于python map和for循環(huán)的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://www.cnblogs.com/sight-tech/p/12987276.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久热r在线视频精品 | 欧美亚洲另类在线观看 | 小草高清视频免费直播 | 天天操丝袜 | 午夜DY888国产精品影院 | 人人揉揉香蕉 | 无码爽死成人777在线观看网站 | 欧美3d怪物交videos网站 | 青青操在线播放 | 亚洲精品久久啪啪网站成年 | 亚洲免费高清视频 | 国产精视频 | 性xxxx中国| 99久久国产综合精品麻豆 | 男人天堂日韩 | 91精品国产亚洲爽啪在线影院 | 99久久国产综合精品网成人影院 | www.尤物视频 | 欧美一区二区三区精品国产 | 日本人妖网站 | 国产日韩精品一区二区在线观看 | 波多野结衣教师未删减版 | 久久热r在线视频精品 | 欧美成人免费观看国产 | 免费观看在线 | 免费一区二区 | 日韩精品久久不卡中文字幕 | 欧美性f | 亚洲、国产综合视频 | chinese野外gay军人 | 欧美午夜寂寞影院安卓列表 | 91好色| 亚洲视频在线观看不卡 | 国产绿帽 | 日韩首页 | 亚洲国产精品综合久久一线 | 国产日日干| 日本视频高清 | 人人干国产 | 婚前试爱全集免费观看 | 热久久免费 |