1. 程式人生 > 程式設計 >python map比for迴圈快在哪

python map比for迴圈快在哪

實驗結論

  • 如果需要在迴圈結束後獲得結果,推薦列表解析;
  • 如果不需要結果,直接使用for迴圈,列表解析可以備選;
  • 除了追求程式碼優雅和特定規定情境,不建議使用map

如果不需要返回結果

這裡有三個process,每個任務將通過增加迴圈提高時間複雜度

	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)))

然後通過三種迴圈方式,去依次執行三種任務

	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,range(length)))
	 # list(map(lambda v: process3(v,range(length)))

python map比for迴圈快在哪

python map比for迴圈快在哪

python map比for迴圈快在哪

從上述的影象中,可以直觀的看到, 隨著任務複雜度的提高以及資料量的增大,每個迴圈完成需要的時間也在增加,
但是map方式花費的時間明顯比其他兩種要更多。 所以在不需要返回處理結果時,選擇標準for或者列表解析都可以。

因為標準for迴圈和列表解析方式在迴圈任務複雜度逐漸提高的情況下,處理時間基本沒有差異。

需要返回結果

這裡有三個task,每個任務將通過增加迴圈提高時間複雜度

	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(_,range(val)))

然後通過三種迴圈方式,去依次執行三種任務

	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,range(length)))
	 return list(map(lambda v: task2(v,range(length)))
	 # return list(map(lambda v: task3(v,range(length)))

python map比for迴圈快在哪

python map比for迴圈快在哪

python map比for迴圈快在哪

從上述的影象中,可以直觀的看到, 隨著任務複雜度的提高以及資料量的增大,每個迴圈完成需要的時間也在增加,
但是明顯看出, 使用list_comp列表解析在, 迴圈需要返回處理結果的每次任務中都表現的很好,基本快於其他兩種迭代方式。

而標準for迴圈和map方式在迴圈任務複雜度逐漸提高的情況下,處理時間基本沒有差異。

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

我認為可能跟處理的資料量有關係,大部分場景下,使用者只測試了少量的資料(100W以下,比如這篇文章,就是資料量比較少,導致速度的區別不明顯),在少量的資料集下,我們確實看到了map方式比for迴圈快,甚至有時候比列表解析還稍微快一點,但是當我們逐漸把資料量增加原來的100倍,這時候差距的凸現出來了。

python map比for迴圈快在哪

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

以上就是python 為什麼map比for迴圈快的詳細內容,更多關於python map和for迴圈的資料請關注我們其它相關文章!