Python collections模块

1、深入理解python中的tuple的功能

基本特性

tuple比list好的地方在哪?

1,性能优化

2.线程安全

3.可以作为dict的key

4.拆包特性

如果拿c语言来类比,Tuple对应的是struct,而List对应的是array

2、namedtuple的功能详解

 我们知道,class创建一个类,他的对象可以通过"."来访问对象的属性。

namedtuple也可以创建一个类对象,继承自tuple的。

1
2
3
4
5
6
from collections import namedtuple
 
User = namedtuple('User', ['name', 'age'])
user = User('lcg', 25)
print(user.name)  # lcg
print(user.age)   # 25

namedtuple部分源码:

可以使用拆包特性传递参数

1.namedtuple也为我们提供了一个._make方法,无需考虑拆包的参数是位置参数还是关键字参数,但是一定要参数对应上

2._asdict方法将namedtuple对象转换为OrderedDict.

3.还有一个好处是,namedtuple是继承tuple的,所有有tuple的很多特性,比如拆包

3、defaultdict的功能详解

defaultdict底层调用__missing__这个魔法函数。

 对一个列表总元素统计可以使用字典的setdefault方法:

defaultdict也是dict的一个扩展子类,传递可调用对象为参数,如int 

用defaultdict统计列表中元素

1
2
3
4
5
6
7
8
9
10
from collections import defaultdict
 
users = ['0bug', '1bug', '2bug', '3bug', '0bug', '0bug', '3bug']
default_dict = defaultdict(int)
for user in users:
    default_dict[user] += 1
 
print(default_dict)        # defaultdict(<class 'int'>, {'0bug': 3, '1bug': 1, '2bug': 1, '3bug': 2})
 
print(list(default_dict))  # {'0bug': 3, '1bug': 1, '2bug': 1, '3bug': 2}

4、deque的功能详解

deque就是双端队列

部分源码:

append、appendleft ,将元素插入到尾部 / 头部

clear 清空数据

copy 浅拷贝

深拷贝需要使用copy模块里的deepcopy方法

count 计数

extend二合一,动态扩容(无返回值而是扩容!)

extendleft 左扩容

index查找索引,找不到就抛出异常

insert 指定位置插入元素

pop, popleft 弹出尾部 头部元素(有返回值)

remove删除某个存在的元素,不存在就抛出异常,无返回值

reverse 原地反转(无返回值)

deque还有一些魔法函数,其实魔法函数也就是python的协议,是python解释器直接调用的。

deque的应用场景

from queue import Queue 这里的Queue就是通过双端队列deque来实现的

Queue部分源码

还有一个很重要的特性:deque是GIL来保护的,是线程安全的list是非线程安全的。

5、Counter功能详解

 Counter是dict的一个子类。一般用来做统计

Counter部分源码:

统计列表

统计字符串

统计英文文章的10个高频单词

update合并统计,参数是一个可迭代对象,Counter是dict的子类,所有也可以传一个Counter对象

most_common(n)统计高频前n个元素,用来解决top n的问题

1
2
3
4
from collections import Counter
 
count = Counter('abcaab')
print(count.most_common(2))  # [('a', 3), ('b', 2)]

most_common部分源码

6、OrderedDict功能详解

OrderedDict是dict的一个子类

OrderedDict部分源码:

OrderedDict是有序的,有序体现在,先添加的排在前面,后添加的排在后面

popitem 弹出最后一个组

pop弹出指定元素,必须写参数

move_to_end将指定元素移至最后

7、ChainMap功能详解

ChainMap可以让我们访问多个字典像访问一个字典一样进行操作,实质是指向关系而不是复制。如果key值重复,循环遍历的时候只算第一个

maps返回列表形式组合

  

posted @   0bug  阅读(369)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示