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
广告