Python collections 模組



Python 的 collections 模組包含不同型別的 容器。容器是一個儲存不同元素的物件,可以訪問元素並在物件上迭代。它包含列表、字典、集合等容器,為了提高這些容器的功能,引入了 collections 模組。

collections 模組為內建資料型別(如列表、元組、字典和集合)提供了替代方案。在某些情況下,它提供的額外資料結構和操作比內建型別更高效。

在下表中,我們可以找到不同的容器及其功能:

容器 功能

namedtuple

用於建立具有命名欄位的元組子類的工廠函式

deque

類似列表的容器,在任一端快速追加和彈出元素

ChainMap

類似字典的類,用於建立多個對映的單一檢視

Counter

字典子類,用於計算可雜湊物件的個數

OrderedDict

字典子類,記住新增條目的順序

defaultdict

字典子類,呼叫工廠函式來提供缺失的值

UserDict

字典物件的包裝器,用於更輕鬆地進行字典子類化

UserList

列表物件的包裝器,用於更輕鬆地進行列表子類化

UserString

字串物件的包裝器,用於更輕鬆地進行字串子類化

namedtuple

Python 中的 namedtuple() 是 collections 模組中的資料型別。它為元組中的每個位置分配一個名稱,允許透過欄位名稱訪問元素,類似於我們透過索引訪問元組中的元素。

語法

以下是 Python namedtuple() 資料型別的語法:

class collections.namedtuple(typename, field_names, rename, default)

示例

以下是 Python namedtuple() 資料型別的基本示例:

from collections import namedtuple
student1 = namedtuple('student1',['name','rollno', 'marks'])
var = student1(name = 'Sai',rollno=237, marks=89)
print("Name :",var.name)
print("Rollno :",var.rollno)
print("Marks :",var.marks)

以下是上述程式碼的輸出:

Name : Sai
Rollno : 237
Marks : 89

deque

在Python中,deque() 是一種資料型別,它返回一個新的 deque 物件,該物件使用 append() 方法從迭代器中初始化資料,從左到右排列。如果未指定迭代器,則新的 deque 為空。

deque 使用collections 模組實現。當我們需要執行更快的操作,例如追加和彈出元素時,我們更傾向於使用deque,因為它的時間複雜度為 O(1),而list 的時間複雜度為 O(n)。

語法

以下是 Python deque() 類的語法:

class collections.deque([iterable[, maxlen]])

示例

以下是 Python deque() 類的基本示例:

from collections import deque
d = deque('xyz')
print(d)

以下是上述程式碼的輸出:

deque(['x', 'y', 'z'])

ChainMap

在 Python 中,ChainMap 類用於將多個字典或對映轉換為單個單元。如果沒有指定對映,則提供單個空字典,以便新的鏈始終至少包含一個對映。

ChainMap() 類在Collections 模組中定義。它通常比建立新字典快得多。

語法

以下是 Python ChainMap() 的語法:

collections.ChainMap(iterable1, iterable2, iterable3)

示例

以下是 Python ChainMap() 的基本示例:

# Python program to demonstrate 
# ChainMap 	
from collections import ChainMap 	
d1 = {'one': 1, 'two': 2} 
d2 = {'three': 3, 'four': 4} 
d3 = {'five': 5, 'six': 6} 	
# Defining the chainmap 
c = ChainMap(d1, d2, d3) 	
print(c) 

以下是上述程式碼的輸出:

ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}, {'five': 5, 'six': 6})

Counter

Python Counter 是一種容器,用於儲存物件的計數。它用於計算迭代器中存在的專案數量。計數可以是任何整數值,包括零或負數。

Counter 是字典的子類。它將資料表示為鍵值對。它繼承了字典的所有方法和屬性。它允許執行算術和集合運算。它可以與任何實現迭代協議的迭代器一起使用。

語法

以下是 Python Counter 的語法:

class collections.Counter([iterable-or-mapping])

示例

在下面的示例中,我們以不同的方式初始化了Counter

from collections import Counter
# With sequence of items 
print(Counter(['x','x','z','x','y','z','x','x','z','x']))
# with dictionary
print(Counter({'y':3, 'z':5, 'x':2}))
# with keyword arguments
print(Counter(z=3, x=5, y=2))

以下是上述程式碼的輸出:

Counter({'x': 6, 'z': 3, 'y': 1})
Counter({'z': 5, 'y': 3, 'x': 2})
Counter({'x': 5, 'z': 3, 'y': 2})

OrderDict

在 Python 中,OrderedDict 是字典的子類,它記住插入鍵的順序。OrderedDict()dict() 之間的唯一區別在於它們處理鍵順序的方式。

標準字典在迭代時不保證任何特定順序,而OrderedDict 提供了向字典中新增鍵的特定順序,並在迭代時保持相同的順序。

語法

以下是 Python OrderedDict() 類的語法:

collections.OrderedDict()

示例

以下是 Python OrderedDict() 的基本示例:

# A Python program to demonstrate working of OrderedDict
from collections import OrderedDict
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
od['d'] = 4

for key, value in od.items():
    print(key,":",value)

以下是上述程式碼的輸出:

a : 1
b : 2
c : 3
d : 4

defaultdict

Python defaultdict() 是一種容器,類似於字典。它存在於collection 模組中。它是字典類的子類,返回一個字典作為物件。

字典和 defaultdict 的功能相似,唯一的區別是 defaultdict 不會引發KeyError。它為不存在的鍵提供預設值。

語法

以下是 Python defaultdict() 類的語法:

defaultdict(default_factory)

示例

以下是 Python defaultdict() 類的基本示例:

from collections import defaultdict
def default():
    return 'Key not found'

dic1 = defaultdict(default)
dic1[1] = 'one'
dic1[2] = 'two'
dic1[3] = 'Three'
print(dic1)
print(dic1[5])

以下是上述程式碼的輸出:

defaultdict(<function default at 0x000002040ACC8A40>, {1: 'one', 2: 'two', 3: 'Three'})
Key not found

UserDict

Python Userdict() 是 collections 模組中的一種字典。它是一個類,充當字典物件的包裝器。當想要建立具有某些修改後的功能或某些新功能的自定義字典時,此類非常有用。

可以將其視為向字典新增新行為。此類接受字典例項作為引數,並模擬儲存在常規字典中的字典。該字典可以透過此類的 data 屬性訪問。

語法

以下是 Python Userdict() 的語法:

collection.Userdict([data])

示例

以下是 Python Userdict() 類的基本示例:

from collections import UserDict
dic = {'a':1,'b': 2,'c': 3,'d':4}
# Creating an UserDict
userD = UserDict(dic)
print(userD)

以下是上述程式碼的輸出:

{'a': 1, 'b': 2, 'c': 3, 'd': 4}

UserList

Python UserList 是 collections 模組中類似於列表的容器。此類充當列表物件的包裝器類。當想要建立具有某些修改後的功能或某些新功能的自定義列表時,此類非常有用。可以將其視為向列表新增新功能的一種方法。

UserList() 接受列表例項作為引數,並模擬儲存在常規列表中的列表。該列表可以透過此類的 data 屬性訪問。

語法

以下是 Python UserList 類的語法:

collections.UserList(data)

示例

以下是 Python UserList() 的基本示例:

# Python program to demonstrate
# userlist
from collections import UserList
List1 = [10, 20, 30, 40]
# Creating a userlist
userlist = UserList(List1)
print(userlist.data)

以下是上述程式碼的輸出:

[10, 20, 30, 40]

UserString

Python UserString 存在於collections 模組中。這是一個類,充當字串的包裝器類。此類用於建立我們自己的字串,還可以修改方法的功能,並向類中新增新方法。可以將其視為向字串新增新行為的一種方法。

UserString 類接受任何可以轉換為字串的引數,並模擬其內容儲存在常規字串中的字串。該字串可以透過此類的 data 屬性訪問。

語法

以下是 Python UserString 的語法:

collections.UserString(data)

示例

以下是 Python UserString 類的基本示例:

from collections import UserString
data1 = [1,2,3,4]
# Creating an UserDict
user_str = UserString(data1)
print(user_str)
print("type :", type(user_str))

以下是上述程式碼的輸出:

[1, 2, 3, 4]
type : <class 'collections.UserString'>
python_modules.htm
廣告