python数据类型-9-容器类型-Collections库-几个额外的数据类型

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 在队列操作上性能更佳。

  1. 创建

    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])
    
  2. 添加元素

    1. append(x):在右侧添加元素 x
    2. 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])
    
  3. 删除元素

    1. pop():从右侧删除并返回最后一个元素。
    2. 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])
    
  4. 访问元素

d = deque([1, 2, 3, 4, 5])
print(d[1])  # 输出:2
  1. 旋转

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])
  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一样知识点多,但是好用!我就写到这,有不足地方,欢迎大家补充,我来更新!

创作不易,喜欢的话点点关注 点点赞,再次_感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SEEONTIME

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值