详解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 相关文章推荐
Python使用pymysql小技巧
Jun 04 Python
Python读取数据集并消除数据中的空行方法
Jul 12 Python
python实现排序算法解析
Sep 08 Python
基于python指定包的安装路径方法
Oct 27 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
python字典排序的方法
Oct 12 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
Python如何实现爬取B站视频
May 20 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
python 用opencv实现霍夫线变换
Nov 27 Python
Python+kivy BoxLayout布局示例代码详解
Dec 28 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
PHP调用MySQL的存储过程的实现代码
2008/08/12 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
简述vue中的config配置
2018/01/23 Javascript
Webpack devServer中的 proxy 实现跨域的解决
2018/06/15 Javascript
vue.js中使用echarts实现数据动态刷新功能
2019/04/16 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
Python获取服务器信息的最简单实现方法
2015/03/05 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
关于python3中setup.py小概念解析
2019/08/22 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
大学总结自我鉴定
2014/01/18 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
公务员个人考察材料
2014/12/23 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
实现一个简单得数据响应系统
2021/11/11 Javascript