博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python初探-collections容器数据类型
阅读量:7235 次
发布时间:2019-06-29

本文共 2341 字,大约阅读时间需要 7 分钟。

collections容器数据类型是对基本数据类型的补充,简单介绍下计数器、有序字典、默认字典、可命名元祖、队列。

计数器(Counter)

Counter是对字典类型的补充,用于追踪值得出现次数

class Counter(dict)

import collectionsobj = collections.Counter('asiwenaohweiatgwho')print(obj)
def most_common()    # 返回一个列表
def elements()    # elements用来循环Counter元素# 取到keysfor item in obj.elements():    print(item)   # 取到key和valuefor k,v in obj.items():    print(k,v)   # 循环elements  -> 得到原始数据# 循环obj  -> 得到处理完的数据
def update()     # 更新Counterobj.update(['eric',11,11])更新计数器,如果原来没有,则新建,如果有则加1
def subtract()        # 减少,可以为负

有序字典(OrderedDict)

对字典类型的补充,记住了字典元素添加的顺序

class OrderedDict(dict)

dic = collections.OrderedDict()# 字典 dic = {'k1':'v1','k2':'v2'}# 列表 li = ['k1','k2']# for i in li:#    print(dic[i])
#!/usr/bin/env python3import collections# dic = dict()dic = collections.OrderedDict()dic['k1'] = 'v1'dic['k2'] = 'v2'dic['k3'] = 'v3'print(dic)
def move_to_end()    # 把一个已存在的元素移到队尾dic.move_to_end('k1')
def popitem()    # 删除并返回,总是按照LIFO顺序,栈# 按照后进先出的顺序,栈dic.popitem()    def pop()    # 删除指定的k,并返回vdic.pop('k2') # 有返回值v2
dic['k4'] = Nonedic.setdefault('k4')    # 这两句效果等同dic.update({'k1':'xx','k2':'yy'})

默认字典(defaultdict)

定义一个字典,让字典的值默认是个什么类型

dic = collections.defaultdict(list)dic['k1'].append('alex')print(dic)
from collections import defaultdictvalues = [11,22,33,44,55,66,77,88,99]my_dict = defaultdict(list)for value in values:    if value > 66:        my_dict['k1'].append(value)    else:        my_dict['k2'].append(value)

可命名元祖(namedtuple)

默认元祖是通过索引去访问,可命名元祖可以通过命名参数去访问

创建可命名元祖,需要先创建类,通过类再去创建可命名元祖

import collections#先去创建类MytupleClass = collections.namedtuple('MytupleClass',['x','y','z'])    # 创建MytupleClass类dir(MytupleClass)obj = MytupleClass(11,22,33)print(obj.x)print(obj.y)print(obj.z)obj._asdict()    #返回一个有序字典OrderedDict

队列

python提供了两种队列:单向队列和双向队列

双向队列 deque

import collectionsdq = collections.deque()    # 创建双向队列dq.append()dq.appendleft()dq.clear()dq.count()dq.extend()dq.extendleft()dq.pop()    #从右边取dq.popleft()    # 从左边取dq.remove()    #从左往右删除dq.reverse()dq.rotate(n)    #轮训,从左往右轮询n个值,如果n为负数,则往左轮询

单向队列 先进先出FIFO

# epoll# 单向队列,不在collections模块中,在queue中import queueq = queue.Queue(N)    #创建一个长队为N的单向队列,如果N省略,则无穷大q.qsize()    #返回队列的长度q.empty()    #如果队列为空,则返回True,否则返回Falseq.full()    #如果队列已满,则返回True,否则返回Faluseq.put('123')    #put一个元素到队列尾部q.get()    #从队列头部移除并返回一个元素,FIFO

转载于:https://www.cnblogs.com/freshgnu/p/5206889.html

你可能感兴趣的文章
数字签名时间戳服务器的原理 !
查看>>
C++ Split string into vector<string> by space
查看>>
JavaScript学习——内置属性
查看>>
Oracle Profile 使用详解--zhuanzai
查看>>
Hadoop-1.1.2、HBase-0.94.7完全分布式集群结构
查看>>
TP-Link wr703N 使用华为HiLink系列上网卡的设置【转】
查看>>
士兵杀敌(四)(树状数组+线段树)
查看>>
Linux 高可用(HA)集群基本概念2
查看>>
Struts+Spring+Hibernate整合入门详解
查看>>
[转载]浅谈组策略设置IE受信任站点
查看>>
【转】maven导出项目依赖的jar包
查看>>
JS实现文本复制与剪切
查看>>
s标签可以if elseif else
查看>>
每天一个linux命令(20):linux chmod命令
查看>>
MySQL复合分区
查看>>
eval解析JSON中的注意点
查看>>
atitit.跨语言实现备份mysql数据库 为sql文件特性 api 兼容性java c#.net php js
查看>>
startActivityForResult不返回结果
查看>>
/dev/null简介
查看>>
uber优步提高成单率,轻松拿奖励!
查看>>