在本节中,咱们将具体介绍 Python 中的 collections
模块。作为 Python 规范库的一部分,collections
提供了一些有用的容器数据类型,它们能够帮忙咱们在编程时更加高效地解决数据。咱们将逐个介绍这些容器数据类型,并通过实例代码来加深了解。请留神,这里的内容针对 Python 3.x 版本。
collections
模块次要包含以下几种数据类型:
namedtuple
deque
Counter
OrderedDict
defaultdict
ChainMap
接下来,咱们将别离介绍这些数据类型的用处和用法。
1. namedtuple
namedtuple
是一个工厂函数,它能够帮忙咱们创立一个简略的自定义类。这个类具备不可变性(即创立后不能批改),并且能够通过属性名来拜访元素。namedtuple
对于须要定义简略数据结构的场景十分有用。
from collections import namedtuple
# 定义一个简略的坐标类
Coord = namedtuple("Coord", ["x", "y"])
coord1 = Coord(3, 4)
print(coord1.x) # 输入:3
print(coord1.y) # 输入:4
2. deque
deque
是一个双端队列(double-ended queue)数据结构,它容许咱们在队列的两端进行插入和删除。相比于 Python 的内置 list
,deque
在头部插入和删除元素时的性能更优。
from collections import deque
d = deque([1, 2, 3, 4, 5])
d.appendleft(0) # 在队列头部插入元素
d.append(6) # 在队列尾部插入元素
print(d) # 输入:deque([0, 1, 2, 3, 4, 5, 6])
d.popleft() # 删除队列头部的元素
d.pop() # 删除队列尾部的元素
print(d) # 输入:deque([1, 2, 3, 4, 5])
3. Counter
Counter
是一个字典(Dict)的子类,用于计数可哈希的对象。它能够不便地对数据进行计数统计。
from collections import Counter
data = ['apple', 'banana', 'orange', 'apple', 'banana', 'apple']
counter = Counter(data)
print(counter) # 输入:Counter({'apple': 3, 'banana': 2, 'orange': 1})
4. OrderedDict
OrderedDict
是一个字典(Dict)的子类,它会保护键值对的插入程序。在 Python 3.7 之前,内置的字典类型不保障程序,但从 Python 3.7 开始,内置字典曾经变为有序,因而 OrderedDict
在某种程度上曾经不再是必须的。
from collections import OrderedDict
od = OrderedDict()
od["a"] = 1
od["b"] = 2
od["c"] = 3
for key, value in od.items():
print(key, value)
# 输入:# a 1
# b 2
# c 3
5. defaultdict
defaultdict
是一个字典(Dict)的子类,它提供了一个默认值工厂办法,用于解决不存在的键。这在某些场景下能够简化代码逻辑。
from collections import defaultdict
dd = defaultdict(int)
data = ['apple', 'banana', 'orange', 'apple', 'banana', 'apple']
for item in data:
dd[item] += 1
print(dd) # 输入:defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})
6. ChainMap
ChainMap
是一个类,用于将多个映射(如字典)组合在一起。在查找时,它会依照增加的程序从第一个映射开始,直到找到相应的键。这在合并多个配置或参数字典时十分有用。
from collections import ChainMap
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
chain_map = ChainMap(dict1, dict2)
print(chain_map["a"]) # 输入:1
print(chain_map["b"]) # 输入:2,因为在 dict1 中找到了 "b"
print(chain_map["c"]) # 输入:4
当初,您应该对 Python collections
模块的各种容器数据类型有了一个根本的理解。这些数据类型旨在简化编程工作,进步代码可读性和性能。在理论编程过程中,您能够依据须要抉择应用这些容器数据类型。
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g