python collections 模块

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面向对象、可以深入了解一下.

猜你喜欢

转载自blog.csdn.net/sunt2018/article/details/84722698
今日推荐