首页技术文章正文

Python的四种必会的内置数据结构

更新时间:2018-12-13 来源:黑马程序员 浏览量:

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

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

一.列表(list)

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

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

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

    1.列表元素的增加

      append的方法是将所要加的元素直接加到先前列表的末尾的方法,在增加的同时还会使得列表得长度增加

      extend方法是将一个列表中得所有元素加拓展到另一个列表的末尾将两个列表合并为一个列表

      insert方法是将一个元素插入到指定的位置,但是值得注意的是insert方法不能插到列表的末尾

    2.列表元素的删除

      remove删除列表中指定的值,如果列表中没有remove参数中指定的值解释器将会报错

      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.列表元素的查看:
      值得说明的是列表的查看和数组相似,都支持下标查看不过不同的是列表的查看功能比数组更多

      a.中括号加下标可以查看列表中的任意元素且元素的下标也都是从0开始的,这点与数组相同,但不同的是数组中的下标不能为负数,而列表可以  

      其表示的是从右到左,而正数则是从左到右

      b.列表中支持切片查看,也就是查看某一段元素其用法为:list[开始位置:结束位置:步长]其中所有元素都可以省,只需要在括号中有一个元素即可例如:

       list[: :2]表示开始为0,结束为列表尾,步长为2

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

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)

#使用items方法遍历

for i,v in fruit.items():

    print("种类",i,"数量",v)

四.元组(tuple)

1元组的定义:

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

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

   
作者:黑马程序员人工智能+Python培训学院    
首发:http://python.itheima.com/


分享到:
在线咨询 我要报名
和我们在线交谈!