欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python map比for循環(huán)快在哪

 更新時間:2020年09月21日 10:42:29   作者:Sight Tech.  
這篇文章主要介紹了python 為什么map比for循環(huán)快,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

實驗結(jié)論

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

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

這里有三個process, 每個任務(wù)將通過增加循環(huán)提高時間復(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)))

然后通過三種循環(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)))

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

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

需要返回結(jié)果

這里有三個task, 每個任務(wù)將通過增加循環(huán)提高時間復(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)))

然后通過三種循環(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)))

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

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

為什么普遍認為map比for快?

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

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

以上就是python 為什么map比for循環(huán)快的詳細內(nèi)容,更多關(guān)于python map和for循環(huán)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python二叉樹的實現(xiàn)實例

    python二叉樹的實現(xiàn)實例

    這篇文章主要介紹了python二叉樹的實現(xiàn)實例,大家參考使用吧
    2013-11-11
  • 詳解利用Python scipy.signal.filtfilt() 實現(xiàn)信號濾波

    詳解利用Python scipy.signal.filtfilt() 實現(xiàn)信號濾波

    這篇文章主要介紹了詳解利用Python scipy.signal.filtfilt() 實現(xiàn)信號濾波,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • python實現(xiàn)簡單加密解密機制

    python實現(xiàn)簡單加密解密機制

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單加密解密機制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Jupyter notebook 更改文件打開的默認路徑操作

    Jupyter notebook 更改文件打開的默認路徑操作

    這篇文章主要介紹了Jupyter notebook 更改文件打開的默認路徑操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Python中的SortedList詳解

    Python中的SortedList詳解

    這篇文章主要介紹了Python中的SortedList集合詳解,Python的SortedSet是一個強大的數(shù)據(jù)結(jié)構(gòu),它結(jié)合了列表和集合的特性,你可以使用sortedcontainers模塊中的SortedList類來創(chuàng)建和操作SortedSet,需要的朋友可以參考下
    2023-09-09
  • Python跳出循環(huán)語句continue與break的區(qū)別

    Python跳出循環(huán)語句continue與break的區(qū)別

    這篇文章主要介紹了Python跳出循環(huán)語句continue與break的區(qū)別,本文用實例來說明它們之間的區(qū)別,簡單易記易懂,需要的朋友可以參考下
    2014-08-08
  • python得到windows自啟動列表的方法

    python得到windows自啟動列表的方法

    今天小編就為大家分享一篇python得到windows自啟動列表的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Django如何使用asyncio協(xié)程和ThreadPoolExecutor多線程

    Django如何使用asyncio協(xié)程和ThreadPoolExecutor多線程

    這篇文章主要介紹了Django如何使用asyncio協(xié)程和ThreadPoolExecutor多線程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Python用zip函數(shù)同時遍歷多個迭代器示例詳解

    Python用zip函數(shù)同時遍歷多個迭代器示例詳解

    這篇文章主要給大家進行介紹了Python如何用zip函數(shù)同時遍歷多個迭代器,文中給出了示例以及原理和注意事項,相信會對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • python使用cPickle模塊序列化實例

    python使用cPickle模塊序列化實例

    這篇文章主要介紹了python使用cPickle模塊序列化的方法,是一個非常實用的技巧,需要的朋友可以參考下
    2014-09-09

最新評論