模块:collections,Python中的扩展数据类型
namedtuple:生成一个可以使用名字来访问的tuple
from collections import namedtuple point = namedtuple('point',['x','y','z','r']) p = point(1,2,3,4) print(p.z) print(p.x) print(p.y) print(p.r) print(p) 打印: 3 1 2 4 point(x=1, y=2, z=3, r=4)
deque:双队列 一个可迭代的 取一个少一个 只能从最前面或者最后面取,可以从最前面、最后面添加,可以插队添加
from collections import deque lis = deque([1,2,3]) lis.append(0) #从最前面添加一个元素 lis.appendleft(4) #从最后面添加一个元素 print(lis.pop())#取出最前面的一个元素 print(lis.popleft())#取出最后面的一个元素 lis.insert(3,'a')#指定位置添加一个元素 print(lis) print('__iter__' in dir(deque))#可迭代的 for i in lis: print(i) 打印: 0 4 deque([1, 2, 3, 'a']) True 1 2 3 a
counter:计算次数 参数为可迭代的 返回元素出现的次数
from collections import Counter number = Counter([1,1,1,2,1,2,1,3,3,4,5,1,4]) print(number) #打印: Counter({1: 6, 2: 2, 3: 2, 4: 2, 5: 1})
defaultdict:带默认值的字典 使用正常下的字典时时,如果引用的Key不存在,就会抛出KeyError。defaultdict可以设置默认值,如果key不存在,会给他一个设定的默认值
from collections import defaultdict lis = defaultdict(lambda :'默认空的值') lis['key'] print(lis) #打印: defaultdict(<function <lambda> at 0x0000026D959C8048>, {'key': '默认空的值'}) # 例子:有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 from collections import defaultdict lis = [11,22,33,44,55,66,77,88,99,90] new_lis = defaultdict(list) for i in lis: if i > 66: new_lis['k1'].append(i) else: new_lis['k2'].append(i) print(new_lis) #打印: defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})
OrderedDict:有序字典
from collections import OrderedDict dic1 ={('a', 1), ('b', 2), ('c', 3), ('e', 4), ('d', 5)} print(dic1)#无序的 dic = OrderedDict() dic['a'] = 1 dic['b'] = 2 dic['c'] = 3 dic['e'] = 4 dic['d'] = 5 print(dic) #有序的 Key会按照插入的顺序排列,不是Key本身排序 #打印: {('e', 4), ('a', 1), ('d', 5), ('b', 2), ('c', 3)} OrderedDict([('a', 1), ('b', 2), ('c', 3), ('e', 4), ('d', 5)])