详解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数据类型之间的转换
Jun 08 Python
Python max内置函数详细介绍
Nov 17 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
微信跳一跳游戏python脚本
Apr 01 Python
用python实现对比两张图片的不同
Feb 05 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
python3.6编写的单元测试示例
Aug 17 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
Python 在函数上添加包装器
Jul 28 Python
Python实现微信表情包炸群功能
Jan 28 Python
用Python提取PDF表格的方法
Apr 11 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
php实现网站插件机制的方法
2009/11/10 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
再谈javascript原型继承
2014/11/10 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
深入理解vue Render函数
2017/07/19 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
js常见遍历操作小结
2019/06/06 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
班组安全员工作职责
2014/02/01 职场文书
银行类自荐信
2014/02/04 职场文书
擅自离岗检讨书
2014/09/12 职场文书
建设工程授权委托书
2014/09/22 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
挂靠协议书
2015/01/27 职场文书
《雷雨》教学反思
2016/02/20 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书