基本数据结构

列表

  1. # 数组的概念就是将一堆同种类型的数据挨个摆放在一起,然后通过数组下标进行索引。
  2. 但数组有一个基本要求,就是放在一起的数必须类型一致。
# 由于Python的变量没有数据类型,所以Python是没有数组的。
但是Python引入了更强大的“列表”
Python的列表甚至可以将整型/浮点型/字符串/对象都放进去。

# 创建一个列表(由中括号括起来的)_number=[1,2,3,4,5]number#创建列表和创建普通变量一样,只需要用中括号括起来,数据之间用 “,” 隔开就可以。# 说明这个为列表形式的存在type([])# 通过类构造函数赋值的方式创建一个列表number_1=list([2,3,4,5,6])number_1multi_list=[“Alonsal”,301,”3.1”,True]multi_list# 强烈不建议在列表中使用不同数据类型的数据# 嵌套:在列表中的列表more_list=[1,3,5,[7,8,9],7,9]arr=[[1,2,3],[4,5,6],[7,8,9]]print(more_list)print(arr)
# 新建空列表,也是列表,但是里面没有元素str_list=[]str_list# 向列表中添加元素str_list.append(“a”)str_list.append(1)str_list# 要注意的是.append方法是按照n+1的顺序逐次添加元素的# 这里还要注意append不是一个BIF,而是属于列表对象的一个方法。# 而且,append()方法不可以增加多个元素str_list.append(“a”)str_list.append(1)str_list# 列表也可以被赋值str_list=[“A”*3]str_list# 新增元素插队可以使用insert()方法# 其中,第一个值是index索引位置,从0开始,第二个值是具体的元素str_list.insert(0,0)str_list# 如果需要在列表中添加多个元素,可以使用extend()方法str_list.extend([999,1.23])str_list# 对列表进行查询str_list# 切片查询[开始 : 结束 : 步长]# 开始是指index==x,结束指index==y,步长是值隔n个取一次值str_list[0]# 如果列表中还包含一个列表# 那么可以通过strlist[X][Y]的方式,来查看列表中的列表的元素。# 切片查询也可以倒着取值_str_list[-1]# 查看列表中有多少个元素len(str_list)# 查看元素在列表中出现的次数str_list.count(1.23)# 更改列表中的元素的值str_list=[0,’AAA’,999,1.23]str_list[3]=888str_list# 使用remove()删除元素,并不需要知道元素在列表中的具体位置,只需要知道元素存在列表中即可。number=[1,2,3,4,5]number.remove(3)number# 使用remove()不可以删除某个元素的位置,这时候就需要用 del 来实现:number=[1,2,3,4,5]delnumber[2]numbernumber=[1,2,3,4,5]delnumbernumber# 要注意的是del不是一个语句,不是一个列表的方法,所不用在后面加上小括号# 同时,del不仅可以删除列表中的元素,也可以删除整个列表。_
—————————————————————————————————————-NameError 1=[1,2,3,4,5] 2del——> 3 NameError

# 因为Python的数据列表是使用“栈”这种数据结构进行存储的
栈(stack):只允许在一段进行插入或者删除操作的线性表

# 因此还可以使用pop()这种弹出栈的方法来弹出元素:_number=[1,2,3,4,5]number.pop()number# pop()方法也可以灵活运用,当加上一个索引值作为参数时,他就会弹出这个索引值对应的元素。_number=[1,2,3,4,5]number.pop(2)number

列表分片

利用索引值,我们每次可以从列表中获取一个元素。 如果需要获取多个元素,可以使用列表分片来实现这个需求:

member=[“Alonsal0”,”Alonsal1”,”Alonsal2”,”Alonsal3”]member[0:2]# 使用冒号来隔开两个索引值,从左边开始一直到右边的结束位置。# 但是结束位置的索引值元素是不会被包含在列表分片中的。# 同样可以尝试:_member[:2]member[1:]member[:]# 列表分片三个参数用法:# 切片查询[开始 : 结束 : 步长]list1=[1,2,3,4,5,6,7,8,9]list1[0:9:2]list1[::3]list1[::-1]# index方法可以查询元素所在的index值list1.index(4)# 此外,还可以给index限定范围:list2=[1,1,2,3,5,8,13,21]start=list2.index(1)+1stop=len(list2)list2.index(1,start,stop)# reverse()方法的作用是将整个列表反转顺序,一切数据反向进行:list2=[1,1,2,3,5,8,13,21]list2.reverse()list2# sort方法是用指定的方式对列表的成员进行排序,默认不需要参数,从小到大排队。list4=[9,11,2,7,15,1,6,13,4]list4.sort()list4# 如果需要从大到小进行排队,则可以:_list4=[9,11,2,7,15,1,6,13,4]list4.sort(reverse=True)list4

元素间调换位置方法如下:

# 如果需要两个元素互相调换位置(index):_member[0],member[3]=member[3],member[0]member# 该方式的语法为:# X , Y = Y , X# 不需要中间变量,X,Y分别代表想要的两个元素或者数字# 当然也可以使用换元法来进行操作互换位置:_member=[“Alonsal0”,”Alonsal1”,”Alonsal2”,”Alonsal3”]temp=member[3]member[3]=member[0]member[0]=tempmember

在列表分片与赋值上面需要注意的内容如下:

# 在这里需要注意的是:
列表分片就是建立原列表的一个拷贝(或副本),
所以想要对列表做出某些修改,
但同时还想保存原来的那个列表,
那就直接使用列表分片的方法来获取拷贝就很方便了。
# 比如说使用:
member2 = member的方式来拷贝列表,
当member发生改变时,member2也会发生改变。
因为member2的取值寄存器是从member中来获取的。
而使用列表分片就不会影响这个
因为使用列表分片后,相当于Python新开了一个寄存器给member2使用

常用列表操作符

xxx1=[123]xxx2=[234]xxx1>xxx2# 如果列表中不止一个元素:_xxx1=[123,456]xxx2=[234,123]xxx1>xxx2# 当列表包含多个元素的时候,默认是从第一个元素开始比较,只要有一个比较成功,就代表列表成功。# 字符串的比较也是同样的道理,比较的就是首字符对应的ASCII码的值的大小。# 列表可以用 + 来进行拼接xxx1=[123,456]xxx2=[234,123]xxx3=xxx1+xxx2xxx3# 也可以用 来复制自身若干次:_xxx3=xxx1+xxx2xxx33# 成员关系操作符 in 和 not in 也可以被应用到列表中:_number=[1,2,3,4,5]1innumbernumber=[1,2,3,4,5]9innumbernumber=[1,2,3,4,5]10notinnumber# 在这里要注意的是,in 和 not in只能判断一个层次的成员关系,# 如果要判断列表里面的列表的元素,应该先进入一层列表:number=[1,2,3,[34,45],4,5]numbernumber=[1,2,3,[34,45],4,5]34innumbernumber=[1,2,3,[34,45],4,5]45notinnumbernumber=[1,2,3,[34,45],4,5]34innumber[3]number=[1,2,3,[34,45],4,5]45notinnumber[3]# 查看列表中的列表中的某个元素:_number=[1,2,3,[34,45],4,5]number[3][1]

元组

# Python的元组和列表类似,
列表是你可以任意修改列表中的元素,可以任意插入或者删除一个元素。
但元组是不可改变的。

# 创建一个元组(由小括号括起来的)_tup=(1,3,5,7,9)tup# 说明这个为元组形式的存在type(())# 通过类构造函数赋值的方式创建一个元组tup_1=tuple((2,3,4,5,6))tup_1# 访问元组的方式和列表无异:tup_1[2]tup_1[1:]tup_1[:4]# 也使用分片来复制一个元组:tup_2=tup_1[:]tup_2# 如果试图修改元组的一个元素tup_2[1]=3
—————————————————————————————————————-TypeError 1# 如果试图修改元组的一个元素——> 2 [1]=3TypeError
# 如果说列表的标志性符号是[ ] ,那么元组的标志性符号应该是” , “_temp=1,2,3type(temp)

# 所以在这里要注意的是:
当要创建的元组中只有一个元素,请在它后面加上一个 " , "
这样相当于告诉Python需要创建的是一个元组,而不是其他类型的事务。
# 更新元组的做法是:
通过将元组进行两次拆分,然后在拆分点上增加新的元素到元组里,然后再合并到元组中。

# 比如更新一次元组:_temp=(“Alonsal0”,”Alonsal1”,”Alonsal2”,”Alonsal4”)temp=temp[:3]+(“Alonsal3”,)+temp[3:]temp# 同理,也可以删除某个元素:_temp=(‘Alonsal0’,’Alonsal1’,’Alonsal2’,’Alonsal3’,’Alonsal4’)temp=temp[:3]+temp[4:]temp

常用列表操作符

# 总结:
可以用在元组的操作符有:
拼接操作符" + ";
重复操作符" * ";
关系操作符" > "," < " 等的;
逻辑操作符" and "," or ";
成员操作符" in "," not in ";

数据结构笔记[Data Structures] - 图1