详解python的四种内置数据结构


Posted in Python onMarch 19, 2019

对于每种编程语言一般都会规定一些容器来保存某些数据,就像java的集合和数组一样python也同样有这样的结构

而对于python他有四个这样的内置容器来存储数据,他们都是python语言的一部分可以直接使用而无需额外的导入

一.列表(list)

列表一种跟java和c中的数据很像的一种数据结构,他都是保存一系列相似,且有序元素的集合,不过不同的是列表中的元素可以不是同一种数据类型,且列表的长度是可变的

可以动态的增加可减少这一点则有点像java中的stringBuilder对象,列表中有一点值得注意的是在对列表进行复制是,不能简单的使用赋值语句,这样会使得两个变量同时指向一个列表,当一个改变时另一个变量的值也会改变,正确的复制方法是用copy()方法来进行复制

关于一个存储结构增删查看则其必备的功能:

1.列表元素的增加

  1. append的方法是将所要加的元素直接加到先前列表的末尾的方法,在增加的同时还会使得列表得长度增加
  2. extend方法是将一个列表中得所有元素加拓展到另一个列表的末尾将两个列表合并为一个列表
  3. insert方法是将一个元素插入到指定的位置,但是值得注意的是insert方法不能插到列表的末尾

2.列表元素的删除

  1. remove删除列表中指定的值,如果列表中没有remove参数中指定的值解释器将会报错
  2. pop删除指定索引位置对应的对象,如果pop方法中没有参数是则其默认的是删除列表的最后的一个对象,该方法的返回值就是对应删除的对象,若其指定的索不存在

    时解释器同样会报错

下面通过一个简单的例子来说明以上方法的使用:

#在 Don't panic变为 on tap
phrase="Don't panic"

plist=list(phrase) #将phrase表示的字符串转化为列表


print(phrase)    #将该字符串输出
print(plist)    #结果为['D', 'o', 'n', "'", 't', ' ', 'p', 'a', 'n', 'i', 'c']

plist.remove("'")  #将‘在列表中删除

for i in range(3):
  plist.pop()   #将列表末尾的3个字符给删除,'n','i','c'

plist.pop(0)    #将plist中索引对应的对象删除,也就是D

#此时list中的值为['o', 'n', 't', ' ', 'p', 'a']

plist.extend([plist.pop(5),plist.pop(4)]) #将p和a的位置交换

plist.insert(2,plist.pop(3)) #将空格插入到对应索引为2的对象前

phrase =''.join(plist) #将列表转化为字符串

print(phrase)

3.列表元素的查看:

值得说明的是列表的查看和数组相似,都支持下标查看不过不同的是列表的查看功能比数组更多

  1. a.中括号加下标可以查看列表中的任意元素且元素的下标也都是从0开始的,这点与数组相同,但不同的是数组中的下标不能为负数,而列表可以其表示的是从右到左,而正数则是从左到右
  2. b.列表中支持切片查看,也就是查看某一段元素其用法为:list[开始位置:结束位置:步长]其中所有元素都可以省,只需要在括号中有一个元素即可例如:
  3. list[: :2]表示开始为0,结束为列表尾,步长为2

下面我们任然以一段简单的代码来展示其用法:

#在 Don't panic变为 on tap
phrase="Don't panic"

plist=list(phrase)
new_phase=''.join(plist[1:3])#在列表中截取on
print(new_phase)
new_phase=new_phase+''.join([plist[5],plist[4],plist[7],plist[6]])


#切片的实例,以及负数

plist[-1] # c

temp =plist[5:1:-1] #[' ', 't', "'", 'n']当步长为负数时其结果时从右到左遍历
temp2=plist[::2]#['D', 'n', 't', 'p', 'n', 'c'],从头遍历到尾步长为2

事实上对于存储类似对象的时候我们一般是使用列表,而对于那种有结构的数据是列表就显得不那么实用了因为列表很难存储数据之间的结构

所以对于那种结构化的数据我们一般采用字典来存储

二.字典(dict)

字典使用来保存一个键值对集合,其中每个唯一的键都有一个与之对应的值,通常我们把字典称为关联数组,如果你学过java的那么对字典就不会陌生了因为它其实就是java中的set集合,python的字典是无序的它不会保留你插入时的顺序,同时由于字典使用的是一种高度优化的散列算法所以即使是没有顺序字典一样能快速的访问与一个键相关的值

1字典的定义:

其结构为{键1:值1,键2:值2},可以看出字典的开始和结束都是用大括号键和值用冒号隔开,不同键值对之间用逗号分隔,其中值可以为列表,另一个字典

2字典的增加:

字典时一个动态的集合他可以在键对不存在时插入新的键值对,但是字典中键必须进行初始化后才可以引用例如:在一个商店中你不知到你的商店中的苹果又没有时
你不可以直接的使用苹果这个值而当你像添加时也需要查明商店中是否有这样物品,对于字典则无需这样。因为字典已经分装好了一个setdefault()方法只需直接调用即可

下面用一段简单代码展示:

#字典的添加键值对
fruit={}
#当直接使用不存在的键值对时

fruit['apple']+=1 #没有对该键初始化而直接使用会出现keyError

#当不使用setdefault方法时动态的增加键值对
if 'apple' not in fruit:
  fruit['apple']=0 #初始化键值
fruit['apple']+=1 #增加苹果的量
print(fruit['apple'])

#使用setdefault时,其实就是设置一个默认值,确保使用时这个使用的键存在即可

fruit.setdefault('apple',0)#当键存在时这个语句没有任何作用,相当于上面选择的分装
fruit['apple']+=1
print(fruit['apple'])

3字典的遍历:

对于一个集合来说我们一般都会采用集合来遍历其中的所有元素但是对于字典来说单单只用循环的话并不够方便因为仅仅只用循环的话解释器只会处理字典的键
对于其值任然需要用键来查值,对于这种问题python提供了一个items()的方法使得可以直接使用循环变量来访问字典的键和值

下面通过一段简单的代码说明:

fruit={'apple':10,'pears':5,'bananas':20,'orange':4}
#直接使用for循环遍历
for i in fruit:
  print("种类",i,"数量",fruit[i])
#使用items方法遍历
for i,v in fruit.items():
  print("种类",i,"数量",v)

4字典的元素删除:

python的字典删除有三种方法,一种是clear()是删除字典中的所有元素,二是pop()根据pop中的参数删除与其键相同的键值对,三是popitem()随机删除字典中的元素
对于有结构的数据我们使用字典时会显得非常方便,因为他不仅可以保存结构,还可以保证记录不重复,但是对于那些没有结构的数据我们又不希望他们重复时,字典和列表显然都不适合我们使用了,这时我们就会想到使用集合了

三.集合(set)

1集合的定义:

{元素1,元素2,元素3.....}和字典一样都是用大括号定义,不过不同的是其中没有冒号分割,还有一种定义方法是向set()函数中传递任意一个序列(如一个字符串set('fsdaf'))

2集合的运算:

python中的集合同于数学中的集合同样有交,并,差等运算其中并算提供方法union(),差集方法difference()不过这里不同的是只能显示使用该方法的集合中不同于另一个集合的所有元素,交集的方法intersection()显示相同的元素

下面用代码来实现上述方法:

#集合的运算
temp={'a','e','i','o','u'}
temp2=set("fda");

#交运算
result=temp.intersection(temp2)#{'a'}

#并运算
result=temp.union(temp2)#{'a', 'o', 'f', 'd', 'u', 'e', 'i'}

#差运算
result=temp.difference(temp2)#{'o', 'e', 'u', 'i'}

我们知道变量有两种一种是变量一种是常量,变量的值可以重新赋予,而常量的值则不行,在python中我们同样有一个不变的结构叫做元组

四.元组(tuple)

1元组的定义:

元组与列表密切相关列表是用中括号定义而元组则是用小括号定义(元素1,元素2,元素3,.....),值得注意的是当只有一个对象是并不能仅仅(对象)这样定义并不是元组,正确的定义方法是(对象,)这样才是元组

在最后我有必要说明一下:在这四个内置结构为空时的解释器的表示方法:1.空列表[] 2.空字典{} 3.空集合set() 4.空元组()

以上所述是小编给大家介绍的python的四种内置数据结构详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
Linux下Python获取IP地址的代码
Nov 30 Python
python使用urlparse分析网址中域名的方法
Apr 15 Python
python使用装饰器和线程限制函数执行时间的方法
Apr 18 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
深入浅析Python中的yield关键字
Jan 24 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
Python爬虫之Selenium设置元素等待的方法
Dec 04 Python
关于 Python json中load和loads区别
Nov 07 Python
python3使用matplotlib绘制条形图
Mar 25 #Python
python3使用matplotlib绘制散点图
Mar 19 #Python
浅谈PYTHON 关于文件的操作
Mar 19 #Python
python scatter散点图用循环分类法加图例
Mar 19 #Python
python使用matplotlib画柱状图、散点图
Mar 18 #Python
matplotlib实现区域颜色填充
Mar 18 #Python
Python函数定义及传参方式详解(4种)
Mar 18 #Python
You might like
WML,Apache,和 PHP 的介绍
2006/10/09 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
JavaScript中的Location地址对象
2008/01/16 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
js图片处理示例代码
2014/05/12 Javascript
Node.js安装教程和NPM包管理器使用详解
2014/08/16 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
使用ThinkJs搭建微信中控服务的实现方法
2019/08/08 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
Python中正则表达式的用法总结
2019/02/22 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
文言文形式的学生求职信
2013/12/03 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
介绍长城的导游词
2015/01/30 职场文书
上下班时间调整通知
2015/04/23 职场文书
学生检讨书怎么写
2015/05/07 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
JavaScript获取URL参数的方法分享
2022/04/07 Javascript