使用list儲存資料時,按索引訪問元素很快,但是插入和刪除元素就很慢了,因為list是線性儲存,資料量大的時候,插入和刪除效率很低。
deque是為了高效實現插入和刪除操作的雙向列表,適合用於佇列和棧:
例子:每次擴充套件1億長度的list,看deque和list的效能。
# -*- coding:utf-8 -*-
from collections import deque
import time
s0 =[0
]*100000000
s1 = deque(
)while
true
: t1 = time.perf_counter(
) s1.extend(s0)
# 每次擴充套件1億長度的list
print
(time.perf_counter(
)-t1)
print
(len
(s1)
)
結果:
0.595923秒
100000000
0.595860秒
200000000
0.603796秒
300000000
0.606941秒
400000000
0.623324秒
500000000
1.448023秒
600000000
17.834734秒
700000000
5.571980秒
800000000
2.075523秒
900000000
2.494620秒
1000000000
deque每次擴張的效能還算平穩。
再來看list的效能
# -*- coding:utf-8 -*-
from collections import deque
import time
s0 =[0
]*100000000
# s1 = deque()
s1 =
while
true
: t1 = time.perf_counter(
) s1.extend(s0)
print
('%f秒'
%(time.perf_counter(
)-t1)
)print
(len
(s1)
)
0.357701秒
100000000
0.766810秒
200000000
1.249358秒
300000000
2.459489秒
400000000
21.623993秒
500000000
32.586217秒
600000000
69.980782秒
700000000
哇,簡直指數級增長,最後一次等了69秒。。。。
備註:我用的是志強xeon® e3 8核 8g 1333hz記憶體條 的台式電腦跑的。
所以對於儲存級別大的,用deque比較合適,不是特別大的list絕對夠用。
python deque模組用法總結
deque模組 內建list結構的加強版 是python標準庫collections中的一項,它提供了兩端都可進行新增 刪除操作的序列。建立deque序列 from collections import deque d deque from collections import deque d de...
Python Deque 模組使用詳解
建立deque序列 from collections import deque d deque deque提供了類似list的操作方法 d deque d.append 1 d.append 2 d.append 3 len d d 0 d 1 輸出結果 3 1 3 兩端都使用pop d deque...
關於LIS和memset 函式
關於最長上公升子串行問題,有兩種演算法,複雜度 o n 2 和 o nlogn 導航 紫書p274,這一種,dp i x 表示的是以i結尾的數的最長子序列是x,演算法就是從第乙個數開始遍歷,再對前面的數進行遍歷,再根據條件不斷地更新dp i 的值。這個演算法的主要在於內層迴圈浪費時間。memset ...