欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python模块-collections

程序员文章站 2023-11-20 09:45:40
tuple(元组)功能: 不可变,但是元组内数组可以修改(不建议) 可迭代 格式 your_tuple=("name1","name2",1,……) 拆包 a,b,c=your_tuple 或者 a,*b=your_tuple(a取值第一个,剩余赋值给b) a=your_tuple[i](只获取第i ......

tuple(元组)功能:

  不可变,但是元组内数组可以修改(不建议)

  可迭代

  格式 your_tuple=("name1","name2",1,……)

  拆包 a,b,c=your_tuple 或者 a,*b=your_tuple(a取值第一个,剩余赋值给b) a=your_tuple[i](只获取第i个)

tuple比较list:

  不可变,性能优化(在编译时确定,速度差异),线程安全,可以当做dict(字典)的key

nametuple功能(数据处理较为常用):

  新建nametuple: class_name=namedtuple("class_name",["name1","name2","name3"])  new_obj=class_name(name1="a",name2="b",name3="c")(初始化)

    -等于class class_name:def _init_(a,b,c):pass

  your_tuple=(a,b,c)  new_tuple=class_name(*your_tuple)

题外:函数参数形式:*a(未指定输入参数全部放入单星号内,形式元组) **a(将指定输入参数名保存到双星号内,字典形式)。mysqlclient、pymsql取出的数据都为tuple

  new_tuple=class_name._make(your_tuple)(可以是字典、元组、数组,不需要星号。但是数量一定要对上,无法添加新属性)

  new_info_dict=new_tuple._asdict()(转化为ordereddict)

defaultdict功能(c语言实现):

  name1,name2,name3分别出现次数

user_dict={}

users=["name1","name2","name3","name1"]  

for user in users:

    user_dict.setdefault(user,0)   #值不存在时,默认0

    user_dict[user]+=1

或者

/*default_dict=defaultdict(list)(可调用对象,list空,int0等等)

default_dict["name"]    #name不存在时调用list

pass*/

users=["name1","name2","name3","name1"]  

for user in users:

    default_dict[user]+=1

pass

字典套用字典

def get_default():

  return {

    "name":"",

    "nums":0

  }

default_dict=defaultdict(get_default)

default_dict["group1"]

pass

deque功能(双端队列,c语言实现,尽量保存相同类型数据):

from collections import deque

 

/*user_list=["name1","name2"]

user_name=user_list.pop()  #取末端数据并在列表中删除*/

user_list=deque(["name1","name2"]) #可迭代对象,数组元组字典都可以,字典key值作为参数

/*append()尾部插入appendleft()插入头部前copy()(浅拷贝)数据相同但id(存储位置)不同,若内可变元素(eg:list)则都指向同一元素eg:[1,2]更改为[1,2,3]则copy前后两数据都变化,若不可变元素则另一个数据不变。deepcopy(深拷贝)可变元素改变后另一元素不变。a.extend(b)将b拼接到a后面,只更改当前元素(a),并不返回一个新元素。.insert(i,"a")在i位置插入a,其后顺延,并不是更改当前元素。.reverse()反转*/

 

deque线程安全,list非线程安全

counter功能(统计):

users=["name1","name2","name2","name3","name1",]

user_counter=counter(users)/*可以是字典数组元组字符串*/

user_counter.update("")  #更新增加后再统计数据

user_counter.most_common(i)#前i个出现次数最多的

ordereddict功能:

from collections import ordereddict

 

user_dict=ordereddict()

user_dict["a"]='name1'

user_dict["b"]='name2'

user_dict["c"]='name3'

 #有序性,先添加在前面后添加在后面

user_dict.popitem()#弹出默认最后的元素,不需要key值

user_dict.move_to_end("a")#将a元素移到最后

chainmap功能:

from collections import chainmap

user_dict1={"a":"name1","b":"name2"}

user_dict2={"c":"name2","d":"name3"}

new_dict=chainmap(user_dict1,user_dict2)#将user_dict1,dict2连接起来,如果遍历时有多个相同key值,只显示第一个

 new_dict.maps#列表形式展示数据

new_dict.maps[i]["a"]="newname"#将第i个元素key为a的value更改为newname