python中的collections模組

2022-09-09 06:39:17 字數 3612 閱讀 6909

python中內建了4種資料型別,包括:list,tuple,set,dict,這些資料型別都有其各自的特點,但是這些特點(比如dict無序)在一定程度上對資料型別的使用產生了約束,在某些使用場景下效率會比較低,比如有時候我們可能需要維護乙個有序的字典等情況。

在這種場景下我們可以使用python內建的collections模組,它包括了很多有用的集合類,合理的使用可以提高我們**的執行效率。

接下來主要對 collections 模組中的常用集合類進行介紹,呼叫 collections 模組:

from collections import *
dict在使用時,當key值不存在時,直接新增value時會出現錯誤,使用defaultdict可以很好的規避該錯誤。

defaultdict是對字典型別的補充,它可以給字典的值設定乙個型別,當key不存在時可以自動生成相應型別的value

例如:

from collections import

defaultdict

test_data =(

('cat

', 2),

('dog

', 5),

('sheep

', 3),

('cat

', 1),

('sheep

', 2)

)test_data_dict =defaultdict(list)

for name, num in

test_data:

print

(test_data_dict)

print(dict(test_data_dict))

執行結果:

defaultdict(

'list

'>, )

在python3.6之前的字典是無序的,但是有時候我們需要保持字典的有序性,orderdict可以在dict的基礎上實現字典的有序性,這裡的有序指的是按照字典key插入的順序來排列,這樣就實現了乙個先進先出的dict,當容量超出限制時,先刪除最早新增的key。

**示例:

from collections import

ordereddict

original_dict =

print('

dict.keys():

', original_dict.keys(), type(original_dict.keys()), sep='\t'

)print('

dict.values():

', original_dict.values(), type(original_dict.values()), sep='\t'

)print

(list(zip(tuple(original_dict.keys()), tuple(original_dict.values()))))

for key, value in

original_dict.items():

print

(key, value)

ordered_dict =ordereddict(list(zip(tuple(original_dict.keys()), tuple(original_dict.values()))))

for key, value in

ordered_dict.items():

print(key, value)

執行結果:

可以看到orderdict是按照字典建立時的插入順序來排序。

python中的list是基於陣列實現的,所以,查詢容易,但是插入和刪除操作時間複雜度較大。

deque就是為了高效實現插入和刪除操作的雙向列表,適合用於佇列和棧,而且執行緒安全。

**示例:

from collections import

deque

d = deque([1, 2, 3, 4, 5])

d.extendleft([0])

#extendleft預設在列表左邊新增元素0

print(d, list(d), sep='\t'

)d.extend([6, 7]) #

extend預設在列表右邊新增元素6、7

print(d, list(d), sep='\t'

)d.popleft()

#popleft預設刪除列表左邊的乙個元素0

print(d, list(d), sep='

\t')

執行結果:

可以在列表中進行雙向操作元素,十分方便。

字典子類,為可以雜湊的物件計數。

**示例:

from collections import

counter

test_counter_data = ['

cat', '

dog', '

sheep

', '

cat', '

dog'

]counter_data =counter()

for item in

test_counter_data:

counter_data[item] += 1

print(counter_data, dict(counter_data), sep='

\t')

執行結果:

可以實現對乙個物件中的元素(上述**中如列表中的元素)進行計數。

元組子類。

python中元組的乙個重要特徵就是元素不可增刪改,而查詢tuple元素時一般採取索引。

使用 namedtuple(typename, field_name)可以命名tuple中的元素,之後便可使用名字來查詢tuple中的值,有點類似於字典中的查詢。

**示例:

from collections import

namedtuple

animal = namedtuple('

animal

', '

type age

') #

將animal元組(元組中包含type、age兩個元素)轉換為物件

print

(animal)

mark = animal(type='

dog', age=2) #

為元組tuple中的元素命名

print(mark.type)

執行結果:

使用namedtuple可以提高**的可讀性和文件性。

ABAP中Collect的用法

簡單來說 collect在非數值字段相同的情況下,起到了數值字段彙總作用。語法 collect w table into i table 舉個簡單的栗子 如下 report ztest no standard page heading.types begin of ty test,id 3 type...

ABAP中COLLECT的用法

要填充內錶 既可逐行 新增資料,也可複製另 乙個 的 內容。要計算數 字字段之和 或要確保內 表中沒有出 現重複條目 請使用 collect 語句,它根 據標準關鍵 字處理行。要在內表 現有行之前 插入新行,請使用 insert 語句。要將內錶 行插入另一 個內錶中,請使用 insert 語句的變式...

Python常用內建模組之collections

collections是python內建的乙個集合模組,提供了許多有用的集合類。1.namedtuple namedtuple是乙個函式,它用來建立乙個自定義的tuple物件,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。這樣一來,我們用namedtuple可以很...