python-collections模块学习

tuple

  • keywords:不可变,可迭代,拆包
tuple=(a,b,c)
tuple[0]=d#错误
tuple=(a,[b,c])
tuple[1].append(d)#不可变不是绝对的
a,b,c=tuple#拆包
a,*others=tuple#只对a感兴趣
  • tuple vs. list
    性能优化:元素全为tuple时显著加速
    线程安全:不可变
    可以作为dict的key:不变,可hash
    dict[(a,b,c)]=d#正确
    dict[[a,b,c]]=d#错误

    拆包特性
    与C语言相比,tuple对应struct,list对应array

namedtuple

创建类:

from collections import namedtuple
User=namedtuple("User",["name","age","height","weight"])
user=User(name="qiuxinling",age=18,height=165,weight=50)
name,age,*others=user
user_tuple=('qiuxinling',18,165)
user=User(*user_tuple,50)
user_dict={name='qiuxinling',age=18,height=165}
user=User(**user_dict,weight=50)
user_tuple=('qiuxinling',18,165,50)
user_list=['qiuxinling',18,165,50]
user_dict={name='qiuxinling',age=18,height=165,weight=50}
user=User._make(user_tuple)
user=User._make(user_list)
user=User._make(user_dict)#可迭代对象,参数必须全部赋值

defaultdict

dict.setdefaultdict(user,0)#等价于dict[user]=0
dict=defaultdict(list)#创建字典,value为list,默认为[]
dict=defaultdict(int)#创建字典,value为int,默认为0
users=[a,b,c]
for u in users:
	dict[u]+=1
#字典套字典
def gen_default():
	return {
	"name":"",
	"nums":0
	}
dict=defaultdict(gen_default)
print(dict["group1"])#{"group1":{"name":"","nums":0}}

deque

双端队列:对可迭代对象左右两边进行操作
deque是线程安全的,list非线程安全的

from collections import deque
user_deque=deque(["qiuxinling1","qiuxinling2","qiuxinling3"])
user_deque.appendleft("qiuxinling0")
print(user_deque[0])
user_deque1=user_deque.copy()#浅拷贝
user_deque1=copy.deepcopy(user_deque)#深拷贝

Counter

from collections import Counter
#对可迭代对象进行统计。字典的子类
user="n;sldvjoajdvoi"
user_counter=Counter(user)
user_counter2=Counter("ackhalkdvh;oahvoie")
user_counter.update(user_counter2)
#topn问题
user_counter.most_common(2)#出现次数最多的2个元素,用堆创建

OrderedDict

user_dict=OrderDict()
user_dict["a"]='qxl1'
user_dict["c"]='qxl2'
user_dict["b"]='qxl3'
#OrderedDict([('a','qxl1'),('c','qxl2'),('b','qxl3')])#与添加顺序一致,dict顺序是无序的
user_dict.popitem()#('b','qxl3')
user_dict.pop('a')#'qxl1'
user_dict.move_to_end('b'))#移到最后

ChainMap

from collections import ChainMap
user_dict1={"a":"qxl1","b":"qxl2"}
user_dict1={"c":"qxl3","d":"qxl4"}
new_dict=ChainMap(user_dict1,user_dict2)#将两个dict模拟为一个,[user_dict1,user_dict2]
new_dict.new_child({"aa":"aa"})#添加字典
print(new_dict.maps[0]["a"])#"qxl1"
for k,v in new_dict.items():
	pritn(k,v)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值