簡體   English   中英

在Python 2和Python 3中使用“+ =”vs“extend”列出串聯

[英]List concatenation using “+=” vs “extend” in Python 2 & Python 3

我正在做一些分析,使用兩種不同的方法對不同長度的列表進行list連接,使用不同的Python版本。

Python 2中使用+=

$ python -m timeit -s "li1=range(10**4); li2=range(10**4)" "li1 += li2"  
10000 loops, best of 3: 55.3 usec per loop  
$ python -m timeit -s "li1=range(10**6); li2=range(10**6)" "li1 += li2"  
100 loops, best of 3: 9.81 msec per loop  

Python 3中使用+=

$ python3 -m timeit -s "li1=list(range(10**4)); li2=list(range(10**4))" "`li1 += li2`"  
10000 loops, best of 3: 60 usec per loop  
$ python3 -m timeit -s "li1=list(range(10**6)); li2=list(range(10**6))" "`li1 += li2`"  
100 loops, best of 3: 11 msec per loop  

Python 2中使用extend

$ python -m timeit -s "li1=range(10**4); li2=range(10**4)" "li1.extend(li2)"  
10000 loops, best of 3: 59 usec per loop  
$ python -m timeit -s "li1=range(10**6); li2=range(10**6)" "li1.extend(li2)"  
100 loops, best of 3: 10.3 msec per loop  

Python 3中使用extend

$ python3 -m timeit -s "li1=list(range(10**4)); li2=list(range(10**4))" "li1.extend(li2)"  
10000 loops, best of 3: 64.1 usec per loop  
$ python3 -m timeit -s "li1=list(range(10**6)); li2=list(range(10**6))" "li1.extend(li2)"  
100 loops, best of 3: 11.3 msec per loop  
  1. 我很驚訝地注意到Python 3比Python 2慢得多,並且跳躍是巨大的。
  2. 另一個非常有趣的事情是做+=比做extend要快得多。

任何實現理由證明上述觀察是正確的,特別是在Python 2和Python 3之間?

我很驚訝地注意到Python 3比Python 2慢得多,並且跳躍是巨大的。

正如其他人所指出的,你的基准測試不支持你的聲明,即Python 3 慢得多。 9.81毫秒對11毫秒,10.3毫秒對11.3毫秒?

事實證明,Python 3比Python 2慢一點。 什么是新文檔說明性能:

3.0概括的最終結果是Python 3.0運行pystone基准測試比Python 2.5慢大約10%。 最有可能的最大原因是為小整數移除了特殊套管。 還有改進的余地,但3.0版本發布后會發生!


另一個非常有趣的事情是做+=比做extend要快得多。

同樣,“更多[更多]更快”被誇大了。 9.81毫秒對10.3毫秒?

有關答案,請參閱此相關的SO問題 extend需要一個Python級函數調用,vs +=可以在C級優化,所以它稍微快一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM