首頁  >  文章  >  後端開發  >  Python之Collections內建模組詳細說明

Python之Collections內建模組詳細說明

高洛峰
高洛峰原創
2017-03-15 14:33:451146瀏覽

collections 是 python 的內建模組,原始碼位於 Lib/collections/init.py ,該模組提供了通用的資料容器。

deque 容器物件

透過from collections import deque 引入,建立deque 容器物件時,可透過設定參數為 Iterable 物件(如tuple,list,str)或maxlen=x(int型別) or None 進行初始化。

deque 容器支援執行緒安全性,透過append 或pop 對deque 的兩端進行插入或移除元素時,時間複雜度為O(1) 。與list 物件相比,list 同樣有相同的api 實作相同的功能,但是對於pop(0) 或insert(0, x) 等對list 的操作,時間複雜度為O(n) 。

如果在初始化 deque 時未宣告 maxlen 或宣告 maxlen=None,那麼 deque 容器可以容納任意多的元素,否則, deque 容器會被定義為有限長度的元素容器。

一旦容器中的元素個數達到設定的maxlen,當有新的元素加入時,則會在加入元素一端的另一端排除相同個數的元素,這樣可以保證當前deque 中的元素全部是最新加入的元素。

deque 物件函數

append(x)

appendleft##(x)

clear()

copy()

#count(x):傳回容器中值為x 的元素數量

extend(iterable)

exten

dleft(iterable)

#index(x):在容器中查到第一個值為x 的元素

索引,如果不存在,就拋起ValueError 例外

insert(idx, x)

pop()

popleft()

remove(x)

reverse():翻轉容器中的元素,並傳回None

rotate(n)

deque 物件只讀

屬性

maxlen

除了上述的物件函數外,由於deque 物件也是Iterable 對象,那麼len(deque);reversed(deque);copy.copy(deque);copy. deepcopy(deque) 等函數同樣起作用,同樣in

操作符也在遍歷deque 操作時使用,切片操作deque[-1] 也可以返回容器中最後一個元素。如果對容器中的隨機元素進行操作的話,建議使用 list。

demo

取得檔案中的python

字串所在的一行內容,而這行內容的前三行

from collections import deque


def search(lines, pattern, maxlen):
    pre_lines = deque(maxlen=maxlen)
    for line in lines:
        if pattern in line:
            yield line, pre_lines
        pre_lines.append(line)


if name == 'main':
    with(open('./test.txt')) as f:
        for line, pre_lines in search(f, 'python', 3):
            for pre_line in pre_lines:
                print(pre_line, end='')
            print(line)

 輸入文字檔案內容為

c#
c
c++
javascript
python
java
delphi
python
golang
perl
css
html
python

透過程式碼輸出為

c
c++
javascript
python

python
java
delphi
python

perl
css
html
python


#

以上是Python之Collections內建模組詳細說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn