Python——collections(集合模块)
集合类常用模块
在内置数据类型(dict,list,str,tuple)的基础上,collections模块还提供了几个额外的数据类型。
deque:
双端队列,可以快速的从另一侧追缴和推出对象。
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低,deque是为了搞笑实现插入和删除操作的双向列表,适合用于队列和栈。
from collections import deque
q = deque(['a','b','c','d'])
q.append('x') #在最后插入
q.appendleft('y') #在最前插入
print(q) #deque(['y', 'a', 'b', 'c', 'd', 'x']) 数据输出为deque类型。
data = q.popleft() #删除第一个并返回值
data1 = q.pop() #删除最后一个并返回值
namedtuple
可命名元组:
为了方便定义元组后的调取问题,可以使用key,vlaue的方式来进行。同时还具有元组的不可改变性。
后台:1.创建一个类,2. 这个类没有方法 3. 所有属性值不能修改。
from collections import namedtuple
Course = namedtuple('course',['name','price','teacher'])
python1 = Course('python',19999,'python1')
print(python1)
OrderedDict:
有序字典:使字典有序化。
import collections
data_dict = collections.OrderedDict([('1',1),('2',2),('3',3)])
print(data_dict) #OrderedDict([('1', 1), ('2', 2), ('3', 3)])
for k,y in data_dict.items():
print(k,y) # 1 1 2 2 3 3
DefaultDict:
默认值字典:
正常情况下,字典内如果没有取的值,将会报KeyError的错误,在使用默认值字典后,如果不存在将会返回预设定的默认值。
from collections import defaultdict dd = defaultdict(lambda: 'N/A') dd['key1'] = 'abc' print(dd['key1']) # key1存在 print(dd['key2']) # key2不存在,返回默认值N/A
实例:
将大于66的和小于66的分别放入到两个value中。
# ---------------正常写法-------------------
lis = [11,22,33,44,55,66,77,88,99,90,98,76]
result = {}
for i in lis:
if i > 66:
if 'key1' not in result:
result['key1'] = []
result['key1'].append(i)
else:
if 'key2' not in result:
result['key2'] = []
result['key2'].append(i)
print(result)
# ------------使用defaultdict写法------------
from collections import defaultdict
lis = [11,22,33,44,55,66,77,88,99,90,98,76]
my_dict = defaultdict(list) # 会生成一个空的list和一个空字典。defaultdict(<class 'list'>, {})
print(my_dict) #defaultdict(<class 'list'>, {})
for i in lis:
if i>66:
my_dict['key1'].append(i)
else:
my_dict['key2'].append(i)
print(my_dict) #如果key1在字典里那么就添加,如果不在那么就新增一个key。
Counter
目的是用来跟踪值出现的次数,它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的interger(包括0和负数)
from collections import Counter
c = Counter('123123123123')
print(c) #Counter({'1': 4, '2': 4, '3': 4})

浙公网安备 33010602011771号