Python数据结构之列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据结构之列表相关的知识,希望对你有一定的参考价值。
一,数据结构的概念
数据结构是通过某种方式组织在一起的数据集合,这些数据元素可以是数字或者字符,甚至可以是其他的数据结构。
Python中最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——元素位置,称为索引,第一个索引为0,第二个为1,以此类推,最后的索引位为-1.
二,序列操作
序列的操作包括:索引,分片,加,乘,检查某个元素是否属于序列成员。Python还可以计算序列长度,找出最大值max()方法,最小值min()方法。同时还可对序列进行迭代iter方法。迭代的意思就是可以对序列中的元素重复执行某些操作。
1,索引
我们可以根据索引的位置来取数据,使用负数时,可以从列表倒序取出数据。
列表的索引
data=["list","string","dict","tuple"]
#使用索引取出对应数值,Python默认0位为第一位,所以使用索引1返回列表第二个数值
print(data[1])
运行结果为string
#使用负数取末尾值
print(data[-1])
运行结果为tuple
2,分片
分片操作可以取出范围内的数据,使用冒号隔开两个索引来进行操作。分片操作有一个很形象的比喻:顾头不顾尾,意思就是我们两个索引位,只包含第一个索引位,第二个索引位不在分片区内
#列表的分片操作 data=["list","string","dict","tuple"] #分片操作取出前三个数据 print(data[0:3]) 运行结果:[‘list‘, ‘string‘, ‘dict‘] #取出全部数据 print(data[:]) 运行结果:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘] #负数取值应注意,左边索引位要比右边索引位小,按从小到大的方式 print(data[-3:-1]) 运行结果:[‘string‘, ‘dict‘] #可以使用步长取值 print(data[0:3:2]) 运行结果:[‘list‘, ‘dict‘] #倒序取值时,要注意步长应使用负数,且不能为0 print(data[3:1:-1]) 运行结果:[‘tuple‘, ‘dict‘]
"对于一个正数步长,Python会从头开始向右取值,直到最后一个元素。对于一个负数步长,则是从序列的尾部开始向左取值,直到元素的第一个元素"
3,序列的加乘操作
使用加操作可以使两个列表连接到一起,需要注意的是,在使用加操作的时候左右两边的数据必须是同一类型,不同类型的数据不能进行连接操作。
#列表的连接操作 data=["list","string","dict","tuple"] data1=[0,1,2,3] data3="hello world" #列表的加操作,连接两个列表、 print(data+data1) 运行结果:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, 0, 1, 2, 3] #测试列表可以与不同类型的值相连接 print(data+data3) 运行结果:TypeError: can only concatenate list (not "str") to list
列表的乘操作
print(data*3)
运行结果:
[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘list‘, ‘string‘, ‘dict‘, ‘tuple‘]
三,列表
1,list函数
使用list函数可以改变一些数据的数据类型:例如字符串,元组等
#使用list函数转变数据类型 data="hello world" print(list(data)) 运行结果: [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘]
2,列表元素赋值
列表的元素赋值使用索引号进行修改,需要注意,我们不能为一个不存在的索引号赋值
列表的赋值操作 data=["list","string","dict","tuple"] print(data) data[-1]="value" print(data) 运行结果 原列表内容:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘] 修改后内容:[‘list‘, ‘string‘, ‘dict‘, ‘value‘]
列表元素分片赋值操作,分片操作可以给一个空列表赋值,也可以为列表做分片替换
#分片赋值 data=["list","string","dict","tuple","int"] data[:2]=["list1","string1"] print(data) 运行结果: [‘list1‘, ‘string1‘, ‘dict‘, ‘tuple‘, ‘int‘] #使用分片赋值的原理,对列表进行删除元素操作 data=["list","string","dict","tuple","int"] #data[:]表示列表所有元素 data[:]=[] print(data) 运行结果 : []空列表
2,删除列表元素
删除列表元素使用del关键字加索引号进行操作,索引号超出列表范围将报错
#删除列表元素操作,使用del关键字 data=["list","string","dict","tuple"] print(data) del data[1] print(data) 运行结果 原列表内容:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘] 删除后内容:[‘list‘, ‘dict‘, ‘tuple‘]
3,列表操作
1,append
此方法用于别表末尾添加值,它操作后的列表不是一个修改过的新列表(类似拷贝的原理,会有专门内容介绍),而是返回一个修改过的原列表。
#append方法 data=["list","string","dict","tuple","int"] print(data) data.append("float") print(data) 原列表内容:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘] 添加后的内容:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘, ‘float‘]
2,count
此方法统计某个元素在列表中出现的次数。
#count方法 data=["list","string","dict","tuple","int","int"] print(data.count("int")) 运行结果: 2
3.extend
此方法可以在列表末尾一次性添加另一个序列的多个值,可以扩展原列表,而不是复制出一个新列表
#extend data=["list","string","dict","tuple","int"] data2=["list1","string1"] print(data) data.extend(data2) print(data) 运行结果: 原data列表:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘] 扩展后data列表:[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘, ‘list1‘, ‘string1‘]
此方法对比列表连接操作的不同,连接操作不会在原有列表上进行扩展,只会创建一个新的列表。
data=["list","string","dict","tuple","int"] data2=["list1","string1"] print(data+data2) print(data) 运行结果: [‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘, ‘list1‘, ‘string1‘] [‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘] 从结果可以看出,data列表并没有被覆盖,而是创建了一个新列表
4,index
index方法用于从列表中查找出某个元素第一次匹配成功后的索引位置
#index方法 data=[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘] print(data.index("int")) 运行结果: 4 返回一个索引位
5,insert
insert方法用于将对象插入到列表中,插入位置的值会自动向后移位,在添加新值后,原列表后进行扩展操作,原列表将被覆盖。
#insert方法 data=[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘] data.insert(0,"string") print(data) 运行结果: [‘string‘, ‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘]
6,pop
pop方法,默认删除列表最后一个值,并且返回删除的值,也可以根据索引位删除指定值,且返回被删除数值的值。
此方法配合insert方法可以实现队列操作,使用insert(0)添加值,使用pop(0)删除值,实现一个先进先出的队列,也可以使用append方法,使用pop方法,实现一个先进后出的队列
放入和移出操作就是入栈和出栈,python可以使用append方法进行入栈操作,pop方法模拟出栈操作
#pop方法 data=[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘] print(data.pop())#默认删除最后一个值 print(data.pop(1))#指定删除索引位1的值 运行结果: int string 在指定索引位时,不能超出列表长度,否则报错
pop方法是唯一一个既能删除一个值又能返回该元素值的列表方法
一个先进先出队列的实现示例:
#先进先出的队列实现 data=[] for i in range(4): data.insert(0,i) print(data) print(data.pop(0)) print(data) 运行结果: 添加值后的列表 [0] 取出的值 0 取出值后的列表 [] 添加值后的列表 [1] 取出的值 1 取出值后的列表 []
一个先进后出的队列实现:
#先进后出的队列实现 data=[5,] for i in range(2): data.insert(0,i) print("添加值后的列表",data) print("取出的值",data.pop()) print("取出值后的列表",data) 运行结果: 添加值后的列表 [0, 5] 取出的值 5 取出值后的列表 [0] 添加值后的列表 [1, 0] 取出的值 0 取出值后的列表 [1]
7,remove
remove方法用于移除列表中某元素第一个匹配项:它移除后不会返回一个删除元素的值
#remove方法 data=[‘list‘, ‘string‘, ‘dict‘, ‘tuple‘, ‘int‘] data.remove("int") print(data) 运行结果: [‘list‘, ‘string‘, ‘dict‘, ‘tuple‘]
8,reverse
reverse方法将列表中的元素反向存放,要想取值,使用reversed,此方法返回一个迭代器
#reverse data=[1,2,3,4,5] print(data.reverse()) redata=data.reverse()#测试后,reverse没有返回值 print(redata) #要想取得返回值,使用reserved,返回一个迭代器 a=reversed(data) print(a)#<list_reverseiterator object at 0x0000026DAA7FCB70> for i in a: print(i)
9,sort
sort方法用于在原位置对列表进行排序,会改变原列表,是列表元素按一定顺序排列。这个方法总是产生一个列表,所以他可以对任何序列进行操作排序
#sort data=[2,5,7,8,5,3,1,4] data.sort() print(data) 运行结果: [1, 2, 3, 4, 5, 5, 7, 8]
sort方法没有返回值,它会改变原列表的值的顺序。
列表的使用就到这里,到后边会介绍列表生成式,和列表推导式的使用
以上是关于Python数据结构之列表的主要内容,如果未能解决你的问题,请参考以下文章