Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
nametuple
是tuple扩展子类,命名元组,其实本质上简单类对象
from collections import namedtuple info = namedtuple("Info", ['name', 'age', 'height'])
# 赋值,是不是有点像面向对象中实例变量方式
info.name = "北门吹雪"
info.age = 18
info.height = 175 # 访问
print(info.name)
其实本质上和下面方式一样
class Info:
def __init__(self):
self.name = None
self.age = None
self.height = None
pass info = Info()
# 赋值
info.name = "北门吹雪"
info.age = 18
info.height = 175
# 访问
print(info.name)
相关方法
1. _make 初始化赋值, 必须长度一致
from collections import namedtuple info = namedtuple("Info", ['name', 'age', 'height'])._make(["北门吹雪", 18, 175]) # 访问
print(info.name)
2. _asdict 将nametuple对象转换为字典对象,是个有序字典
from collections import namedtuple info = namedtuple("Info", ['name', 'age', 'height'])._make(["北门吹雪", 18, 175]) # 访问
print(info._asdict())
defaultdict
是dict的扩展类,访问字典的key如果没有则自动设置默认值,并添加进字典
info = dict()
name = info.setdefault('name', "北门吹雪")
print(name, info) from collections import defaultdict
# 默认值必须是可迭代对象
info = defaultdict(lambda: "北门吹雪")
name = info['name']
print(name, info)
deque
双端队列, 操作和list类似
list deque 推荐用来保存相同类似数据,相关方法和list一致
特性: deque是线程安全的,list不是线程安全,多线程编程则使用deque
from collections import deque
names = deque()
names.append("北门吹雪")
names.append("QiNiuYun")
names.insert(0, "今日头条")
print(names)
Queue
队列(先进先出),通过 deque实现
核心两个方法 put get,会堵塞
from queue import Queue message = Queue()
# 放入数据
message.put("北门吹雪")
# 消费数据
print(message.get())
Counter
对可迭代对象做统计出现个数,直接返回统计结果,是dict的子类
from collections import Counter
from random import randint numbers = [randint(1, 5) for _ in range(20)]
numbers_count = Counter(numbers)
print(numbers_count)
相关方法
1. update 添加新的数据
from collections import Counter
from random import randint numbers = [randint(1, 5) for _ in range(20)]
numbers_count = Counter(numbers)
print(numbers_count)
# 添加新的数据
numbers_count.update([randint(1, 10) for _ in range(20)])
print(numbers_count)
2. most_common(N) 输出出现次数当前最多的前N个元素
from collections import Counter
from random import randint numbers = [randint(1, 5) for _ in range(20)]
numbers_count = Counter(numbers)
print(numbers_count)
# 添加新的数据
numbers_count.update([randint(1, 10) for _ in range(20)])
print(numbers_count) # 输出出现次数当前最多的前3个元素,返回列表
print(numbers_count.most_common(3))
OrderDict
继承dict, 保持字典添加顺序,具有dict所有方法
from collections import OrderedDict info = OrderedDict()
# 填入数据
info["name"] = "北门吹雪"
info['age'] = 18
info['height'] = 175
print(info)
其他方法
1. popitem 默认删除最后的key:value,并返回
from collections import OrderedDict info = OrderedDict()
# 填入数据
info["name"] = "北门吹雪"
info['age'] = 18
info['height'] = 175
# 返回元组形式
print(info.popitem('name'))
2. pop 必须传入key,删除key:value,返回value
from collections import OrderedDict info = OrderedDict()
# 填入数据
info["name"] = "北门吹雪"
info['age'] = 18
info['height'] = 175 # 返回age对应的值
print(info.pop('age'))
3. move_to_end 传入key,将元素移到最后
from collections import OrderedDict info = OrderedDict()
# 填入数据
info["name"] = "北门吹雪"
info['age'] = 18
info['height'] = 175 # 移动数据
info.move_to_end('age')
print(info)
arrary
只能存放一种类型的数组,这个数组高性能非常高,非常类似list除了只能存放一种类型数据
#标识符 存放数据类型 占用字节
'u' Unicode字符 2
“L” 符号整数 4
“L” 无符号整数 4
“q” 符号整数 8
“q” 无符号整数 8
F ′浮点 4
“D” 浮点 8
import array names = array.array("u")
print(names.append("北"))
print(names.append("门"))
print(names.append("吹"))
print(names.append("雪"))
print(names)
print(names[1])
经验:
1. 这些数据类型基础还是从list tuple set dict基本数据类型扩展而来,本质上添加了一些特性
2. 不同的情况下选择不同的数据结构对数据进行处理
北门吹雪: https://www.cnblogs.com/2bjiujiu/
Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary的更多相关文章
- Python高级数据结构-Collections模块
在Python数据类型方法精心整理,不必死记硬背,看看源码一切都有了之中,认识了python基本的数据类型和数据结构,现在认识一个高级的:Collections 这个模块对上面的数据结构做了封装,增加 ...
- Python原生数据结构增强模块collections
collections简介 python提供了4种基本的数据结构:list.tuple.dict.set.基本数据结构完全可以hold住所有的场景,但是在处理数据结构复杂的场景时,这4种数据结构有时会 ...
- Python常用数据结构之collections模块
Python数据结构常用模块:collections.heapq.operator.itertools collections collections是日常工作中的重点.高频模块,常用类型由: 计数器 ...
- Python collection模块与深浅拷贝
collection模块是对Python的通用内置容器:字典.列表.元组和集合的扩展,它包含一些专业的容器数据类型: Counter(计数器):dict子类,用于计算可哈希性对象的个数. Ordere ...
- Python常用数据结构之heapq模块
Python数据结构常用模块:collections.heapq.operator.itertools heapq 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小 ...
- python双端队列-collection模块
双端队列(double-ended queue,或者称deque)在需要按照元素增加的顺序来移除元素时非常有用.其中collection模块,包括deque类型. 使用实例:
- Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)
Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...
- (python数据分析)第03章 Python的数据结构、函数和文件
本章讨论Python的内置功能,这些功能本书会用到很多.虽然扩展库,比如pandas和Numpy,使处理大数据集很方便,但它们是和Python的内置数据处理工具一同使用的. 我们会从Python最基础 ...
- python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数
上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...
随机推荐
- 单元测试与单元测试框架 Jest
什么是单元测试? 测试是一种验证我们的代码是否可以按预期工作的手段. 被测试的对象可以是我们程序的任何一个组成部分.大到一个分为多步骤的下单流程,小到代码中的一个函数. 单元测试特指被测试对象为程序中 ...
- C# 解析获取Url参数值
今天遇到一个需求,需要处理通过接口传过来的一个参数,参数内容为一个拼接好的Url地址,且该地址还会携带了一些额外的参数,包括但不限于数字,字符串,json串.样例如下: http://www.cple ...
- Python 3.10 明年发布,看看都有哪些新特性?
我们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4.Python 3.9已经处于其开发的beta阶段,并且2020年7月3日预发布了beta版本(3.9.0b ...
- Pyinstaller打包: 将资源文件或文件夹打包到最后生成的exe中
前提:用pyinstaller打包时部分资源文件可以利用qrc转成py文件来读取,但是有部分文件类型不适用. 原理:Pyinstaller 将资源文件一起打包到exe中.当exe运行时,会生成一个临时 ...
- Google谷歌在根据流量统计分析当年的2008年汶川大地震
这是一张2008年的老图,Google当时的博文说道:"当我们依照惯例整理和分析谷歌搜索引擎的流量数据时,一条从未见过的曲线出现在我们面前.当意识到发生了什么事情时,我们的眼睛湿润了.&qu ...
- Linux下Vim常用操作
linux下Vim的常用操作 linux 首先\(ctrl+Alt+t\)打开小框框 \(./\):相当于手机上的\(home\)键 \(ls\):当前文件夹的东东 \(mkdir\) ...
- 使用java爬虫从雪球网下载股票数据
雪球网也是采用Ajax方式展示数据,我依然采用开发者工具查看其访问地址和返回数据. 访问使用到的库是jsoup,解析返回的json用的类库是jackson,二者的依赖是: <!-- jsoup ...
- 执行Python程序出现“SyntaxError: Non-UTF-8 code starting with '\xb6'...”错误怎么办?
如果文件中有中文,直接执行python xx.py会出现以下错误: SyntaxError: Non-UTF- code starting with '\xb6' in file XX.py on l ...
- 发布jar包到服务器读取resource目录下文件
* 解决:当项目打包成jar之后resources路径下面的证书文件访问不到* 思路:* 1.运行时先复制一个jar* 2.将复制的jar解压到jar文件目录* 3.删除复制的jar跟解压的非证书文件 ...
- Java的foreach用法
foreach其实就是for的加强版,其语法如下: for(元素类型type 元素变量value : 遍历对象obj) { 引用x的java语句; } 举个例子,比如定义一个数组,使用foreach以 ...