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:
(test_data_dict)
print(dict(test_data_dict))
defaultdict(在python3.6之前的字典是無序的,但是有時候我們需要保持字典的有序性,orderdict可以在dict的基礎上實現字典的有序性,這裡的有序指的是按照字典key插入的順序來排列,這樣就實現了乙個先進先出的dict,當容量超出限制時,先刪除最早新增的key。'list
'>, )
**示例:
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'
(list(zip(tuple(original_dict.keys()), tuple(original_dict.values()))))
for key, value in
original_dict.items():
(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兩個元素)轉換為物件
(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可以很...