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

List.sort 和 Sorted 用哪個比較好?

開發 后端
排序是編程經常遇到的場景,在 Python 中,對一個列表進行排序有兩種方法,一個是 list.sort 可以對列表原地排序,另一個是 Python 的內建方法 sorted,它不改變原始列表,而是返回一個新的列表,那到底用哪一個呢?

[[433436]]

排序是編程經常遇到的場景,在 Python 中,對一個列表進行排序有兩種方法,一個是 list.sort 可以對列表原地排序,另一個是 Python 的內建方法 sorted,它不改變原始列表,而是返回一個新的列表,那到底用哪一個呢?

如果你不想改變原始列表,那肯定選擇 sorted 啊,如果改變不改變都無所謂呢?本文就來回到這個問題。

可以先大膽猜測一下,sorted 不改變原始列表,相當于內部對列表進行了深 copy,這個過程必然更占用內存,更慢一些。

現在我們通過實際運行來比較一下:

內存占用比較

先看下結果:

代碼:

  1. import random 
  2. import resource 
  3. import sys 
  4. import time 
  5. from sniffing import FunctionSniffingClass 
  6.  
  7. def list_sort(arr): 
  8.     return arr.sort() 
  9.  
  10.  
  11. def sorted_builtin(arr): 
  12.     return sorted(arr) 
  13.  
  14. if __name__ == "__main__"
  15.     if len(sys.argv) != 2: 
  16.         sys.exit("Please run: python (sort|sorted)"
  17.     elif sys.argv[1] == "sorted"
  18.         func = sorted_builtin 
  19.     elif sys.argv[1] == "sort"
  20.         func = list_sort 
  21.     else
  22.         sys.exit("Please run: python (sort|sorted)"
  23.  
  24.     # Lib Testing Code 
  25.     arr = [random.randint(0, 50) for r in range(1_000_000)] 
  26.     mythread = FunctionSniffingClass(func, arr) 
  27.     mythread.start() 
  28.  
  29.     used_mem = 0 
  30.     max_memory = 0 
  31.     memory_usage_refresh = 0.005  # Seconds 
  32.  
  33.     while 1: 
  34.         time.sleep(memory_usage_refresh) 
  35.         used_mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss 
  36.         if used_mem > max_memory: 
  37.             max_memory = used_mem 
  38.  
  39.         # Check to see if the function call is complete 
  40.         if mythread.isShutdown(): 
  41.             # Uncomment if yu want to see the results 
  42.             # print(mythread.results) 
  43.             break 
  44.  
  45.     print("\nMAX Memory Usage:", round(max_memory / (2 ** 20), 3), "MB"

很明顯,內建的 sorted 函數占用的內存更多。代碼用到了 FunctionSniffingClass 類,這里就不展開了,完整代碼請訪問:https://github.com/DahlitzFlorian/list-sort-vs-sorted-list/tree/master/memory_measurement

速度比較

測試代碼:

  1. import random 
  2.  
  3. from somedecorators import timeit 
  4.  
  5. @timeit() 
  6. def list_sort(arr): 
  7.     return arr.sort() 
  8.  
  9.  
  10. @timeit() 
  11. def sorted_builtin(arr): 
  12.     return sorted(arr) 
  13.  
  14.  
  15. def main(): 
  16.     arr = [random.randint(0, 50) for r in range(10_000_000)] 
  17.  
  18.     sorted_builtin(arr) 
  19.  
  20.     list_sort(arr) 
  21.  
  22. if __name__ == "__main__"
  23.     main() 

最后

從結果來看,符合預期,如果不考慮是否改變原始列表的順序,無論是內存占用還是速度,list.sort 總是更優秀。

但是,請記住,這 list.sort 僅適用于列表,而 sorted 接受任何可迭代對象。此外,如果您使用 list.sort,您將丟失原始列表的次序。

 

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

2021-11-11 07:02:33

類型函數調用

2023-09-14 15:48:53

排序測試

2021-11-30 23:01:51

編程語言數據Python

2009-09-15 09:24:42

思科認證考試思科認證

2021-08-05 08:32:45

TypeScript InterfaceType

2020-09-23 16:53:46

Python編輯器工具

2024-10-28 21:11:52

2018-06-16 14:32:16

無線路由器單頻雙頻

2024-02-22 15:31:46

Python排序

2010-03-29 17:38:18

CentOS源代碼

2021-03-15 14:09:49

電腦軟件安全

2020-01-17 13:33:42

大數據分析師大數據工程師

2011-10-26 20:34:24

ssh 客戶端

2020-12-08 15:54:15

編程語言Python

2020-11-18 09:26:52

@property裝飾器代碼

2020-06-30 09:10:35

編程學習技術

2020-07-28 10:40:26

大數據專業技術

2015-01-08 22:06:18

2023-04-27 07:26:31

IP地址無符號
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品影院 | 91在线播| 日本精品一区二区 | 中文字幕亚洲免费 | 久久久欧洲 | 伊人色综合久久久天天蜜桃 | 国产精品久久久久久久久久免费看 | www.五月天婷婷 | 午夜激情小视频 | 青青艹在线视频 | 成人精品啪啪欧美成 | 国产一区二区欧美 | 午夜影院污 | 免费久久99精品国产婷婷六月 | 成人免费视频网站在线观看 | 亚洲精品一区中文字幕乱码 | 精品永久 | 在线观看日本网站 | 九九视频在线观看 | 国产一区二区三区在线 | chinese中国真实乱对白 | 亚洲综合天堂 | 影音先锋中文字幕在线观看 | 欧美一区二区三区视频 | 国产欧美日韩久久久 | 欧美一级免费看 | 天天视频一区二区三区 | 亚洲日本欧美日韩高观看 | 亚洲欧美日韩在线不卡 | 免费毛片网 | 国产精品视频偷伦精品视频 | 精品二区视频 | 69亚洲精品 | 中文字幕在线三区 | 在线观看免费观看在线91 | 国产精品美女视频 | 欧美黄色一区 | 男人天堂手机在线视频 | 草草视频在线免费观看 | 国产高清免费 | 亚洲国产一区在线 |