36.collections高阶类型

1.collections 模块

该模块提供了一些高阶的数据类型。
nametuple    具名元组
deque        双端队列
orderedDict  有序字典
defaultdict  默认值字典
Counter      计算器

2.具名有名字的元组

有名字的元组
导入:
from collcetions import namedtuple  
格式:
namedtuple('名字', '名字1  名字2···')
第二个参数如果是字符串名字之间用空格隔开。
namedtuple('名字', ['名字1',  '名字2'···])  

对象可以通过点的方式取值。
from collections import namedtuple

res = namedtuple('坐标', ['x', 'y'])
res = res(30, 40)
print(res)  # 坐标(x=30, y=40)
print(res.x)  # 30
print(res.y)  # 40


res = namedtuple('坐标', 'x y')
res = res(30, 40)
print(res)  # 坐标(x=30, y=40)
print(res.x)  # 30
print(res.y)  # 40

3.双端队列

3.1队列

--------------------------------------
  ---4------3-----------2------->1        一端进一端出
--------------------------------------
queue 队列模块 
方法:
.Queue()    初始化
.put(参数)  往队列添加值
.get()     从队列中拿值
import queue

# 初始化一个对象
res = queue.Queue()
# 添加值
res.put('one')
res.put('two')
res.put('three')

# 取值
print(res.get())
print(res.get())
print(res.get())
print(res.get())  # 等待输入

"""
传入三个值,拿四个,第四次拿不到值,程序会等待传入值,
如果传入三个值,拿三个,程序就此结束。
"""

3.2双端队列

----------------------------------------
      --------------------------->
            4   1   2   3   5         两端进两端出
       <---------------------------
----------------------------------------
deque 双端队列模块
.deque() 初始化
.appendleft() 左边追加
.popleft()    左边弹出
from collections import deque

# 初始化对象
res = deque([1, 2, 3])
res.appendleft(4)  # 左边追加
res.append(5)      # 右边追加

print(res.pop())  # 5
print(res.popleft())  # 4
print(res.popleft())  # 1
print(res.popleft())  # 2
print(res.popleft())  # 3
print(res.popleft())  # 报错

"""
多取值会报错
"""

4.有序字典

Python2 中能明显的看出字典的是无序的,Pycharm中做过优化,输出'看起来'很有规律。
OrderedDict 有序字典
返回的结果可以使用字典的方法。
from collections import OrderedDict

orderly_dic = OrderedDict([('name', 'kid'), ('age', 18)])
print(orderly_dic)  # OrderedDict([('name', 'kid'), ('age', 18)])

5.默认字典

访问字典的时候,如果键不存在报错。
dic = {
    
    }
print(dic['a'])  # KeyError: 'a'
defaultdict(类型) 设置默认值当键不存在是返回默认值。

返回的结果可以使用字典的方法。
from collections import defaultdict

dic = defaultdict(int)
print(dic)  # defaultdict(<class 'int'>, {})
print(dic['a'])  # 0
from collections import defaultdict

dic = defaultdict(str)
print(dic)  # defaultdict(<class 'str'>, {})
print(dic['a'])  # 空格 看不见

image-20211125201613401

from collections import defaultdict


dic = defaultdict(list)
print(dic)  # defaultdict(<class 'list'>, {})
print(dic['a'])  # []
from collections import defaultdict


dic = defaultdict(dict)
print(dic)  # defaultdict(<class 'list'>, {})
print(dic['a'])  # {}
from collections import defaultdict

ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]
my_dic = defaultdict(list)  # 括号内写上类型
for i in ls:
    if i > 5:
        my_dic['k2'].append(i)
    else:
        my_dic['k1'].append(i)
print(my_dic)  # defaultdict(<class 'list'>, {'k1': [1, 2, 3, 4, 5], 'k2': [6, 7, 8, 9]})

6.计算器

Counter 统计字符串中每个字符出现的次数。
返回的结果可以使用字典的方法。
from collections import Counter
res = 'abcdeabcdabcaba'
res = Counter(res)
print(res)  # Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

猜你喜欢

转载自blog.csdn.net/qq_46137324/article/details/121546056
36