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数据结构之列表的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第26篇):将列表映射成字典

30 段 Python 实用代码

Python代码阅读(第25篇):将多行字符串拆分成列表

Python代码阅读(第40篇):通过两个列表生成字典

Python 之 Socket编程(TCP/UDP)

Python代码阅读(第13篇):检测列表中的元素是否都一样