Python常用数据结构用法超详细讲解(值得收藏)
bigegpt 2024-10-12 05:02 10 浏览
1、列表
?????(1)定义:通过中括号括起、逗号分隔的一组数据
?????(2)基本的列表操作:
??????????给元素赋值
>>> x = [1,1,1]
>>> x[1] = 2
>>> x
[1, 2, 1]
??????????删除元素
>>> name = ['xiaoming','xiaohong','xiaohei']
>>> del name[2]
>>> name
['xiaoming', 'xiaohong']
??????????给切片赋值
>>> name = list('zhang')
>>> name
['z', 'h', 'a', 'n', 'g']
>>> name[2:] = list('11')
>>> name
['z', 'h', '1', '1']
??????????还可以不替换原有元素的情况下插入元素
>>> name = list('zhang')
>>> name
['z', 'h', 'a', 'n', 'g']
>>> name[1:1] = [1,2,3]
>>> name
['z', 1, 2, 3, 'h', 'a', 'n', 'g']
??????????替换空切片
>>> name = list('zhang')
>>> name
['z', 'h', 'a', 'n', 'g']
>>> name[1:4] = []
>>> name
['z', 'g']
?????(3)列表方法:
??????????list.append(x):在列表的末尾添加一个元素。相当于a[len(a)] = [x]
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.append(b)
>>> a
[1, 2, 3, [4, 5, 6]]
??????????list.insert(i, x):在给定的位置插入一个元素。第一个参数是要插入的元素的索引,以a.insert(0, x)插入列表头部,a.insert(len(a), x)等同于a.append(x)
??????????list.remove(x):移除列表中第一个值为x的元素。如果没有这样的元素,则抛出异常ValueError
??????????list.pop([i]):删除列表中给定位置的元素并返回它。如果没有给定位置,a.pop()将会删除并返回列表中的最后一个元素
??????????list.sort(key=None,reverse=False):对列表中的元素进行排序(参数可用于自定义排序,解释请参考见sorted())
??????????list.reverse():反转列表中的元素
??????????list.clear():删除列表中所有的元素。相当于del a[:]
??????????list.extend(iterable):使用可迭代对象中的所有元素来扩展列表。相当于a[len(a)] = iterable
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
??????????list.count(x):返回元素x在列表中出现的次数
??????????list.copy():返回列表中的一个浅拷贝。相当于a[:]
??????????list.index(x[,start[,end]]):返回列表中第一个值为x的元素的从零开始的索引。如果没有这样的元素将会抛出ValueError异常。???????可选参数start和end是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是start参数。
注意:
??????????insert, remove或者sort方法,只修改列表,并没有打印返回值——它们返回默认值None。这是python中所有可变数据结构的设计原则。
??????????并非所有数据或可以排序或者比较(字符串和数字等)
?????(3)列表推导式
??????????list = [i**2 for i in rang(1,4)]
??????????list = [i**2 for i in rang(1,4) if i !=1]
??????????list = [i**j for i in rang(1,4) for j in rang(1,4)]
2、元组
?????(1)定义:元组使用()进行定义,tuple、list、range都是序列数据类型,元组是不可变的,可以通过解包、索引来访问
?????(2)元组的不可变特性:
??????????当元组中嵌套列表时可以修改
>>> a = [1,2,3]
>>> b = (1,2,a)
>>> b
(1, 2, [1, 2, 3])
>>> b[2][0] = "a"
>>> b
(1, 2, ['a', 2, 3])
?????(3)元组方法:
??????????tuple.count(x):返回元素x在元组中出现的次数
??????????tuple.index(x):返回列表中第一个值为x的元素的从零开始的索引。如果没有这样的元素将会抛出ValueError异常。
3、集合
?????(1)定义:集合是由不重复元素组成的无序的集,它的基本用法包括成员检测和消除重复元素,可以使用{}或者set()函数创建集合,要创建一个空集合只能用set()而不能用{}
?????(2)集合的特性:
??????????不同元素组成、无序、集合中的元素必须是不可变类型
?????(3)集合方法:
??????????自动去重:集合是有不同元素组成,所以即便里面的值重复了,也会去重。
>>> a ={1,1,2,2,3,3}
>>> a
{1, 2, 3}
??????????打印内容是无序的:
>>> a ={'你','是', '谁'}
>>> a
{'谁', '你', '是'}
??????????set.add(x):在集合set中添加一个元素x
??????????set.pop()、set.remove(x)和set.discard(x):pop会从集合中随机删除一个数,remove 可以传参数删除指定的值,但是要注意,如果传的值不存在会报错。discard()与remove()用法相同,但是如果元素不存在,不会报错。
??????????set.intersection(x):取set与x的交集
??????????set.union(x):取set与x的并集
??????????set.difference(x):取set与x的差集
??????????set.symmetric_difference(x):取set与x的交叉补集,集合A 是1、2、3 集合B 是 2、3、4 交叉补集就只保留 1 和 4 。因为 1 是 A 独有的, 4 是B 独有的。交叉补集会去掉共有的部分,只保留双方独有的部分。
4、字符串
?????(1)定义:字符串使用引号进行定义
?????(2)字符串方法:
??????????str.center(w,“f”):在两边填充w个字符f(默认为空格),让字符串居中
??????????str.find(x):在字符串中查找子串x,如果找到就返回子串的第一个字符的索引,否则返回-1
??????????str.join(x):合并字符串
>>> dirs = '','user','bin'
>>> '/'.join(dirs)
'/user/bin'
>>> print('c:'+ '\\'.join(dirs))
c:\user\bin
??????????str.lower():返回字符串的小写版本
??????????str.replace(‘ab’,‘cd’):将字符串中的子串ab替换为cd,并返回替换后的结果
??????????str.split():切割字符串
??????????str.strip():将字符串开头和末尾的空白(不包括中间的空白)删除,并返回删除后的结果
??????????str.translate():同replace一样替换字符,不同点的是他只能进行单字符替换
5、字典
?????(1)定义:字典是Python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或者元组。
?????(2)创建字典:第一种:item = {“a”:1,“b”:2},第二种:item = dict(a=1, b=2)
?????(3)基本的字典操作:
??????????len(d):返回字典d包含的项(键-值对)数
??????????d[k]:返回与键k相关联的值
??????????d[k] = v:将值v关联到键k
??????????del d[k]:删除键为k的项
??????????k in d:检查字典d是否包含键为k的项
?????(4)字典方法:
??????????dict.update(x):对于通过参数提供的字典,将其项添加到当前字典中,如果当前字典包含键相同的项,就替换它
??????????dict.clear():删除所有的字典项,这种操作是就地执行的(就像list.sort一样),因此什么都不返回(或者说返回None)
??????????dict.copy():返回一个新字典,其包含的键-值对与原来的字典相同(这个方法执行的是浅复制,因为值本身是原件,而非副本)
>>> x = {'username':'admin','password':['foo','bar','baz']}
>>> y = x.copy()
>>> y['username'] = 'zhs'
>>> y['password'].remove('bar')
>>> y
{'username': 'zhs', 'password': ['foo', 'baz']}
>>> x
{'username': 'admin', 'password': ['foo', 'baz']}
可以看到,当替换副本中的值是,原件不受影响。然而,如果修改副本中的值,原件也将发生变化,为避免这种问题,一种办法是执行深复制,可使用模块copy中的函数deepcopy。
??????????dict.fromkeys():创建一个新字典,其中包含指定的键,且每个键对应的值都是None。
>>> dict.fromkeys(['name','age'])
{'name': None, 'age': None}
如果不想使用默认值None,可提供特定的值
>>> dict.fromkeys(['name','age'], '(121)')
{'name': '(121)', 'age': '(121)'}
??????????dict.get(‘name’, ‘N/A’):访问字典中name的值,不存在时返回N/A(默认返回None)
??????????dict.items():返回一个包含所有字典项的列表
??????????dict.keys():返回一个字典视图,其中包含指定字典中的键
??????????dict.values():返回一个由字典中的值组成的字典视图,不同于方法keys,方法values返回的视图可能包含重复的值
??????????dict.pop(‘x’):获取与键x相关联的值,并将该键-值对从字典中删除
??????????dict.popitem():随机的删除一个字典项
??????????dict.setdefault():与get相似,也是获取与指定键相关联的值,但setdefault还在字典不包含指定的键时,在字典中添加指定的键-值对
>>> d = {}
>>> d.setdefault('name', 'N/A')
'N/A'
>>> d
{'name': 'N/A'}
相关推荐
- 或者这些Joplin插件也可以帮助你的笔记应用再一次强大
-
写在前面距离上次分享《搭建私有全平台多端同步笔记,群晖NAS自建JoplinServer服务》已过去一段时间,大家是否开始使用起来了呢?如果你和我一样已经使用过Joplin有一段时间了,那或许你也会...
- Three.JS教程4 threejs中的辅助类
-
一、辅助类简介Three.js提供了一些辅助类(Helpers)以帮助我们更容易地调试、可视化场景中的元素。ArrowHelepr:创建箭头辅助器;AxisHelper:创建坐标轴辅助器;BoxH...
- 第2章 还记得点、线、面吗(二)(第二章还能敲钟吗)
-
glbgltf模型(webvrmodel)-gltf模型下载定制,glb模型下载定制,三维项目电商网站在线三维展示,usdz格式,vr模型网,网页VR模型下载,三维模型下载,webgl网页模型下载我...
- 如何检查Linux系统硬件信息?从CPU到显卡,一网打尽!
-
你可能会问:“我为什么要关心硬件信息?”答案很简单:硬件是Linux系统的根基,了解它可以帮你解决很多实际问题。比如:性能调优:知道CPU核心数和内存大小,才能更好地调整程序运行参数。故障排查:系统卡...
- SpriteJS:图形库造轮子的那些事儿
-
从2017年到2020年,我花了大约4年的时间,从零到一,实现了一个可切换WebGL和Canvas2D渲染的,跨平台支持浏览器、SSR、小程序,基于DOM结构和支持响应式的,高...
- 平时积累的FPGA知识点(6)(fpga经典应用100例)
-
平时在FPGA群聊等积累的FPGA知识点,第六期:1万兆网接口,发三十万包,会出现掉几包的情况,为什么?原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes,用IP的话,IP会自带约束。...
- 芯片逻辑调度框架设计 都需要那些那些软件工具
-
设计芯片逻辑调度框架通常需要使用以下软件工具:1.逻辑设计工具:例如Vivado、Quartus、SynopsysDesignCompiler等,用于设计和实现逻辑电路。2.仿真工具:例如Mo...
- ZYNQ与DSP之间EMIF16通信(正点原子领航者zynq之fpga开发指南v3)
-
本文主要介绍说明XQ6657Z35-EVM高速数据处理评估板ZYNQ与DSP之间EMIF16通信的功能、使用步骤以及各个例程的运行效果。[基于TIKeyStone架构C6000系列TMS320C6...
- 好课推荐:从零开始大战FPGA(从零开始的冒险4399)
-
从零开始大战FPGA引子:本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“...
- 业界第一个真正意义上开源100 Gbps NIC Corundum介绍
-
来源:内容由「网络交换FPGA」编译自「FCCM2020」,谢谢。FCCM2020在5月4日开始线上举行,对外免费。我们有幸聆听了其中一个有关100G开源NIC的介绍,我们对该文章进行了翻译,并对其中...
- 高层次综合:解锁FPGA广阔应用的最后一块拼图
-
我们为什么需要高层次综合高层次综合(High-levelSynthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++...
- Xilinx文档编号及其内容索引(部分)
-
Xilinx文档的数量非常多。即使全职从事FPGA相关工作,没有几年时间不可能对器件特性、应用、注意事项等等有较为全面的了解。本文记录了我自使用Xilinx系列FPGA以来或精读、或翻阅、或查询过的文...
- Xilinx Vivado联合Modelsim软件仿真
-
引言:Xilinx公司Vivado开发软件自带仿真工具,可以实现一般性能的FPGA软件仿真测试,其测试执行效率以及性能都不如第三方专用仿真软件Modelsim强。本文我们介绍下如何进行Vivado20...
- 体育动画直播是怎么做出来的?从数据到虚拟赛场的科技魔法!
-
你是否见过这样的比赛直播?没有真实球员,却能看梅西带球突破?足球比赛变成动画版,但数据100%真实?电竞比赛用虚拟形象直播,选手操作实时同步?这就是体育动画直播——一种融合实时数据、游戏引擎和AI的...
- Dialogue between CPC and political parties of neighboring countries held in Beijing
-
BEIJING,May26(Xinhua)--TheCommunistPartyofChina(CPC)inDialoguewithPoliticalPartiesof...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)