python collections 模块
tuple
tuple
# 不可变的
name_tuple = ("name1"."name2")
name_tuple[1] = "ner_name2"
会报错
# 可迭代的
name_tuple = ("name1"."name2")
for name in name_tuple:
print(name)
# 拆包
user_tuple = ("boby",18,170)
name,age,height = user_tuple
可以隐含位置信息 属性关系
user_tuple = ("boby",18,170,"beijng")
name,*other = user_tuple
# 不可变不是绝对的
user_tuple = ("boby",[18,170,"beijng"])
name_tuple[1].append("23333")
tuple比list好的地方
immutable 不可变的
性能的优化-----一些常量会在编译时确定
线程安全-----线程不可对其修改
可作为dict字典的key 可哈希对象
拆包特性
namedtuple
from collections import namedtuple
#创建了一个User类
User = namedtuple("User",["name","age","addr"])
user = User(name="sun",age=18,addr="beijing")
print(user.name,user.age,user.addr)
为什么不直接自己定义使用 class User: __init__呢
namedtuple 是tuple子类,简单
省掉很多class内置的变量,很省空间
#
User = namedtuple("User",["name","age","addr"])
user_tuple = ("name1","27","beijing")
user = User(*user_tuple )
user_dict = {
"name" = "name1",
"age" = 19,
"addr" = "shanghai"
}
user = User(**user_dict)
user = User._make(iterable)
print(user.name,user.age,user.addr)
user_info_dict = user._asdict()
defaultdict
#统计数量1
user_dict = { }
users = ["body3","body1","body2","body1","body2","body1","body1"]
for user in users:
if user not in user_dict:
user_dict[user] = 1
else:
user_dict[user] += 1
print(user_dict)
#############################################################
#统计数量2
user_dict = { }
users = ["body3","body1","body2","body1","body2","body1","body1"]
for user in users:
user_dict.setdefault(user,0) #少做一次查询操作
user_dict[user] += 1
print(user_dict)
#############################################################
from collections import defaultdict
#default_dict = defaultdict(list)
#统计数量3
default_dict = defaultdict(int)
users = ["body3","body1","body2","body1","body2","body1","body1"]
for user in users:
default_dict[user] += 1
print(default_dict)
############################
#default_dict = defaultdict(list)
#default_dict = defaultdict(int)
#default_dict = defaultdict(dict)
#嵌套dict
def gen_default():
return {
"name" : "",
"nums":0
}
default_dict = defaultdict(gen_default)
deque
n_list = [1,2]
n = n_list.pop()
print(n_list,n)
双端
from collections import deque
u_list = deque(iterable)
append appendlef
clear
copy浅拷贝
extend(扩容,并不是返回新元素)
insert
pop
popleft
reverse
remove
等等
# python自带从copy中 有深拷贝哦
最后 deque是线程安全的
Counter
from collections import Counter
users = ["body3","body1","body2","body1","body2","body1","body1"]
user_counter = Counter(users)
print(user_counter)
#Counter是dict的一个子类
user_counter = Counter(iterable)
user_counter.update(newiterable或者其他counter)
#top n问题
most_common(2)
等等方法
OrderedDict
dict的一个子类
dict
python2 显示是无序的
python3 显示是有序的
from collection import OrderedDict
user_dict = OrderedDict()
ChainMap
from collections import ChainMap
有两个dict
dic1
dic2
遍历两个字典的所有数据
newdic = ChainMap(dic1,dic2)
如果有重复,for循环,只打印dic1里的。
maps 列表的形式展示出来
指向数据,并不是产生一个新数据
修改newdic 会相应的改变元数据dic1 dic2
总结
collections增强了一些常用的数据结构功能
教程没有讲的 抽象基类ABC python面向对象、可以深入了解一下.