成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

扁平化列表,哪個方法更快?

開發 前端
在平時的編碼過程中,經常會碰到嵌套列表扁平化的需求,比如說把列表[[1,2,3],[4,5]] 變成 [1,2,3,4,5],Python 有很多方法可以實現這一功能,到底哪個方法更快呢?

[[433688]]

在平時的編碼過程中,經常會碰到嵌套列表扁平化的需求,比如說把列表[[1,2,3],[4,5]] 變成 [1,2,3,4,5],Python 有很多方法可以實現這一功能,到底哪個方法更快呢?我們今天就來試一試。

第一種方法:建一個空列表,遍歷嵌套列表把元素逐一放入并返回:

  1. def flatten1(lst: List[list]) -> list: 
  2.     flat = [] 
  3.     for l in lst: 
  4.         for x in l: 
  5.             flat.append(x) 
  6.     return flat 

第二種方法:使用列表推導式:

  1. def flatten2(lst: List[list]) -> list: 
  2.     return [x for l in lst for x in l] 

第三種方法:使用列表的 extend 方法:

  1. def flatten3(lst: List[list]) -> list: 
  2.     flat = [] 
  3.     for l in lst: 
  4.         flat.extend(l) 
  5.     return flat 

第四種方法:使用 + 號:

  1. def flatten4(lst: List[list]) -> list: 
  2.     flat = [] 
  3.     for l in lst: 
  4.         flat += l 
  5.     return flat 

第五種方法:使用 itertools.chain:

  1. def flatten5(lst: List[list]) -> list: 
  2.     return list(itertools.chain.from_iterable(lst)) 

第六種方法:使用 functools.reduce:

  1. def flatten6(lst: List[list]) -> list: 
  2.     return functools.reduce(operator.iconcat, lst, []) 

你可以先猜一下,然后看看下面的運行結果:

  1. import functools 
  2. import itertools 
  3. import operator 
  4. import random 
  5. import time 
  6. from typing import List 
  7.  
  8. def flatten1(lst: List[list]) -> list: 
  9.     flat = [] 
  10.     for l in lst: 
  11.         for x in l: 
  12.             flat.append(x) 
  13.     return flat 
  14.  
  15. def flatten2(lst: List[list]) -> list: 
  16.     return [x for l in lst for x in l] 
  17.  
  18. def flatten3(lst: List[list]) -> list: 
  19.     flat = [] 
  20.     for l in lst: 
  21.         flat.extend(l) 
  22.     return flat 
  23.  
  24. def flatten4(lst: List[list]) -> list: 
  25.     flat = [] 
  26.     for l in lst: 
  27.         flat += l 
  28.     return flat 
  29.  
  30. def flatten5(lst: List[list]) -> list: 
  31.     return list(itertools.chain.from_iterable(lst)) 
  32.  
  33. def flatten6(lst: List[list]) -> list: 
  34.     return functools.reduce(operator.iconcat, lst, []) 
  35.                             # += 
  36.  
  37. def time_f(f): 
  38.     elapsed = 0.0 
  39.     n = 100 
  40.     M = 1000 
  41.     N = 100 
  42.     for _ in range(n): 
  43.         lst = [[random.randint(0,1000000) for j in range(N)] for i in range(M)] 
  44.         start = time.perf_counter() 
  45.         f(lst) 
  46.         elapsed += time.perf_counter() - start 
  47.     print(f"{f.__name__} cost {elapsed/n * 1000 :.4f} ms"
  48.  
  49. if __name__ == '__main__'
  50.     time_f(flatten1) 
  51.     time_f(flatten2) 
  52.     time_f(flatten3) 
  53.     time_f(flatten4) 
  54.     time_f(flatten5) 
  55.     time_f(flatten6) 

運行環境:Python 3.8.5,運行結果如下:

 

結果:前兩種方法比較慢,不推薦使用,后面四種方法差別不大,隨你挑。

 

責任編輯:武曉燕 來源: Python七號
相關推薦

2013-09-22 14:47:50

扁平化UI設計

2013-09-22 15:03:27

扁平化UI設計

2013-09-22 15:43:27

扁平化UI設計

2013-09-22 14:56:26

扁平化UI設計

2013-09-22 14:30:43

扁平化設計

2013-09-22 16:36:07

扁平化UI設計

2013-09-22 16:17:59

扁平化UI設計

2013-09-22 16:22:58

扁平化UI設計

2019-04-08 16:29:28

多云扁平化云計算

2013-09-23 10:16:04

扁平化UI設計

2013-07-11 09:45:48

扁平化扁平化設計

2013-09-22 16:30:13

扁平化UI設計

2013-09-25 10:52:27

Android 4.4扁平化

2013-06-09 11:04:07

設計扁平化設計平面化設計

2013-01-28 09:39:05

用戶界面扁平化設計

2020-09-16 14:17:42

flat方法

2010-10-25 14:16:59

扁平化網絡

2012-02-20 14:48:30

網絡扁平化

2013-09-22 15:09:04

扁平化UI設計

2010-10-25 13:58:48

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产片侵犯亲女视频播放 | 成人免费在线小视频 | 亚洲婷婷六月天 | 国产欧美一区二区三区在线看蜜臀 | 99re视频在线免费观看 | 一级黄色片美国 | 日日干夜夜草 | 亚洲视频精品 | 日本天堂一区二区 | 91久久精品一区二区二区 | 亚洲视频在线观看免费 | 日韩视频成人 | 日韩欧美国产一区二区 | 精品国产区 | 亚州视频在线 | 国产美女一区二区 | 国产精品久久久久久久久免费软件 | 久久精品手机视频 | 97视频免费 | 黄色免费网 | 日韩在线免费视频 | 国产成人综合久久 | 一区二区视频在线 | 96av麻豆蜜桃一区二区 | 国产精品视频导航 | 精精国产xxxx视频在线 | 成人精品国产免费网站 | 亚洲小视频在线播放 | 成人欧美一区二区三区在线播放 | 久久久久久国产 | 国产最好的av国产大片 | 国产高清免费视频 | 四虎永久影院 | 国产精品无码久久久久 | 夜夜爽99久久国产综合精品女不卡 | 日日夜夜影院 | 日韩成人国产 | 日韩欧美网 | 国产伦精品一区二区三区在线 | 久久久性色精品国产免费观看 | 欧美伊人|