python数据类型-9-容器类型-Collections库-几个额外的数据类型
一.说明
在python数据类型系列文章中我们已经基本介绍完python内置的数据类型,Collections库在python内置数据类型的基础上,提供几个额外的数据类型:
Counter: 是一个字典子类,用于计数可哈希对象。它会为每个对象存储出现的次数。
defaultdict:是一个字典子类,它提供了一个默认值,在访问不存在的键时返回该默认值。这使得它在处理缺失数据时非常方便。
OrderedDict:是一个字典子类,它保持键值对的插入顺序。这在需要维护元素顺序的情况下非常有用。
namedtuple:用于创建可以通过名字来访问元素的元组子类。它可以使代码更加可读,特别是在需要返回多个值时。
deque : 是双端队列,支持在两端高效地添加和删除元素。与列表相比,
deque
在队列操作上性能更佳。ChainMap: 用于将多个字典或映射组合在一起,形成一个视图。这在需要查找多个字典中的值时非常方便。
二.Collections库 数据类型详细介绍
1.Counter
Counter
是一个字典子类,用于计数可哈希对象。它会为每个对象存储出现的次数,其中元素为Key,统计的次数为value。
from collections import Counter
# 计数字符出现次数
char_count = Counter("hello world")
print(char_count) # 输出:Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
print(char_count.most_common(2)) #[('l', 3), ('o', 2)]
# 计数列表中的元素
element_count = Counter([1, 2, 2, 3, 3, 3])
print(element_count) # 输出:Counter({3: 3, 2: 2, 1: 1})
# elements()
a = 'l'
b = 'o'
c = 'h'
d = Counter(a=4, b=8, c=2)
print(list(d.elements())) #['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'c', 'c']
2.defaultdict
defaultdict
是一个字典子类,它提供了一个默认值,在访问不存在的键时返回该默认值。这使得它在处理缺失数据时非常方便。
from collections import defaultdict
# 默认值为 list
dd = defaultdict(list)
dd['a'].append(1)
dd['a'].append(2)
dd['b'].append(3)
print(dd) # 输出:defaultdict(<class 'list'>, {'a': [1, 2], 'b': [3]})
print(dd['a']) # [1, 2]
print(dd['sds']) # []
3.OrderedDict
OrderedDict
是一个字典子类,它保持键值对的插入顺序。这在需要维护元素顺序的情况下非常有用。
from collections import OrderedDict
od = OrderedDict()
od['first'] = 1
od['second'] = 2
od['third'] = 3
print(od) # 输出:OrderedDict([('first', 1), ('second', 2), ('third', 3)])
print(list(od.keys())) # 输出:['first', 'second', 'third']
4.namedtuple
namedtuple
用于创建可以通过名字来访问元素的元组子类。它可以使代码更加可读,特别是在需要返回多个值时。
from collections import namedtuple
# 定义一个 Point 类
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p) # Point(x=10, y=20)
print(p.x, p.y) # 输出:10 20
# 使用 _make 方法从可迭代对象创建 Point 实例
data = (30, 40)
p2 = Point._make(data)
print(p2) # 输出:Point(x=30, y=40)
5.deque
deque
是双端队列,支持在两端高效地添加和删除元素。与列表相比,deque
在队列操作上性能更佳。
-
创建
from collections import deque # 创建一个空的 deque d = deque() # 从列表创建 deque d_from_list = deque([1, 2, 3, 4, 5]) print(d_from_list) # 输出:deque([1, 2, 3, 4, 5])
-
添加元素
append(x)
:在右侧添加元素x
。appendleft(x)
:在左侧添加元素x
。
d = deque() # 在右侧添加元素 d.append(1) d.append(2) print(d) # 输出:deque([1, 2]) # 在左侧添加元素 d.appendleft(0) print(d) # 输出:deque([0, 1, 2])
-
删除元素
pop()
:从右侧删除并返回最后一个元素。popleft()
:从左侧删除并返回第一个元素。
# 删除并返回右侧元素 right_elem = d.pop() print(right_elem) # 输出:2 print(d) # 输出:deque([0, 1]) # 删除并返回左侧元素 left_elem = d.popleft() print(left_elem) # 输出:0 print(d) # 输出:deque([1])
-
访问元素
d = deque([1, 2, 3, 4, 5])
print(d[1]) # 输出:2
- 旋转
rotate(n)
方法可以将 deque
中的元素向右旋转 n
次。如果 n
为负值,则向左旋转。
d = deque([1, 2, 3, 4, 5])
d.rotate(1) # 向右旋转 1 次
print(d) # 输出:deque([5, 1, 2, 3, 4])
d.rotate(-2) # 向左旋转 2 次
print(d) # 输出:deque([2, 3, 4, 5, 1])
-
限制大小
deque
允许设置最大长度。超过最大长度时,deque
将自动删除最旧的元素。d = deque(maxlen=3) # 设置最大长度为 3 d.append(1) d.append(2) d.append(3) print(d) # 输出:deque([1, 2, 3]) d.append(4) # 添加新元素,自动删除最旧的元素 print(d) # 输出:deque([2, 3, 4])
三.ChainMap
ChainMap
用于将多个字典或映射组合在一起,形成一个视图。这在需要查找多个字典中的值时非常方便。
from collections import ChainMap
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
chain = ChainMap(dict1, dict2)
print(chain['b']) # 输出:2,查找顺序是 dict1 优先 不会继续查询 dict2
print(chain['c']) # 输出:4
四、总结
通过Python中的数据类型学习,我们发现很多类型的功能 Python已经内置,不需要我们再去实现,这也是Python的特色吧!跟VUE一样知识点多,但是好用!我就写到这,有不足地方,欢迎大家补充,我来更新!
创作不易,喜欢的话点点关注 点点赞,再次_感谢!