月度归档:2019年04月

Python列表操作函数


2019年4月30日 18:32:00   1,199 次浏览

列表可以进行多个数据的存储,同时python中的列表设计非常到位,它可以实现内容动态扩充,可以进行后期数据的删除,这些就需要通过Python提供的列表操作函数来实现了。
对于Python语言而言,开发者肯定要记住一些常用的函数,同事对于一些不常用的函数需要自己进行文档的查看

列表操作函数


append(data)    在列表最后追加新内容
clear()         清除列表数据
copy()          列表拷贝
count()         统计某一个数据在列表中的出现次数
extend(列表)    为一个列表追加另外一个列表
index(data)     从列表查询某个值第一次出现的位置
insert(index,data)  想列表中指定索引位置追加新数据
pop(index)      从列表弹出并删除一个数据
remove(data)    从列表删除数据
reverse()       列表数据反转
sort()          列表数据排序

#空的列表信息

infos = []
print("初始化信息: %d" % len(infos))
infos.append("风哥")
infos.insert(0,"www.guji.work")
print("数据追加后的列表长度: %d, 列表内容: %s" % (len(infos),infos))


程序运行结果:

初始化信息: 0
数据追加后的列表长度: 2, 列表内容: ['www.guji.work', '风哥']

使用append()函数是在列表的最后进行追加的,而insert()是在指定的索引位置上进行添加,添加之后其它的数据向后移动。建议使用append()函数进行内容的追加,这样可以保证数据的顺序。

在进行列表数据追加的时候,还可以追加一个新的列表内容,这个就称为列表的扩充。

#空的列表信息

infos = []
print("初始化列表长度: %d, 地址: %d " % (len(infos),id(infos)))
infos.append("风哥")
infos.extend(["夏丹"])
print("数据追加后的列表长度:%d, 地址: %d, 列表内容:%s " % (len(infos),id(infos),infos))


程序运行结果:

数据追加后的列表长度:2, 地址: 140331673610632, 列表内容:['风哥', '夏丹']

在进行列表数据扩充的操作里面的确是在一个内存空间里面完成的所有功能。列表操作的时候还提供一个列表的拷贝支持,直接使用copy()函数就可以使用当前列表的内容创建新的列表

msg = infos.copy()
print("infos列表的保存地址编号: %d, 列表内容: %s" % (id(infos),infos))
print("msg列表的保存地址编号:%d, 列表内容:%s" %(id(msg),msg))


程序运行结果:

infos列表的保存地址编号: 140200931293704, 列表内容: ['风哥', 'www.guji.work', 'www.baidu.com']
msg列表的保存地址编号:140200931293576, 列表内容:['风哥', 'www.guji.work', 'www.baidu.com']

此时创建了两个不同的内存空间,同时两个空间的内容是完全相同的。

列表除了可以进行内容的扩充之外,也可以执行删除操作,列表里面提供有上传函数的支持,remove()在进行删除的时候是根据内容进行的数据删除

remove()操作需要根据内容删除,并且没有返回值。在使用remove()函数删除的时候内容存在可以删除,不存在就会抛出”ValueError: list.remove(x): x not in list”异常信息,所以如果要使用这个函数操作之前一定要使用in进行判断

infos = ["风哥", "www.guji.work"]
print("数据删除前的列表内容:%s" %(infos))
print("执行数据删除remove()函数 %s" % infos.remove("风哥"))
print("数据删除后的列表内容: %s" % (infos))


程序执行结果:

数据删除前的列表内容:['风哥', 'www.guji.work']
执行数据删除remove()函数 None
数据删除后的列表内容: ['www.guji.work']

如果不知道内容要进行数据的删除,最简单的原始的python支持可以采用del关键字实现内容删除,而且使用del删除的时候只需要知道列表数据的索引即可实现

infos = ["风哥", "www.guji.work"]
print("数据删除前的列表内容:%s" %(infos))
del infos[1]
print("数据删除后的列表内容: %s" % (infos))


程序执行结果为:

数据删除前的列表内容:['风哥', 'www.guji.work']
数据删除后的列表内容: ['风哥']

使用del关键字可以实现索引的删除,但是无法知道被删除了哪些数据,在整个的删除操作里面,最方便的删除是根据索引删除,而后可以告诉用户哪些数据被删除了,这样的功能就是pop函数

infos = ["风哥", "www.guji.work"]
print("数据删除前的列表内容:%s" %(infos))
print("执行数据删除pop()函数: %s " % infos.pop(1))
print("数据删除后的列表内容: %s" % (infos))


程序执行结果:

数据删除前的列表内容:['风哥', 'www.guji.work']
执行数据删除pop()函数: www.guji.work
数据删除后的列表内容: ['风哥']

使用pop()函数表示的是一个弹出的形式,从列表里面根据索引弹出,弹出的同时也就表示内容的删除了。但是需要清楚一个问题,每当列表之中弹出一个数据之后实际上就都会发生索引变更。

infos = ["风哥", "www.guji.work"]
print("数据删除前的列表内容:%s" %(infos))
print("执行数据删除pop()函数: %s " % infos.pop(1))
print("执行数据删除pop()函数: %s " % infos.pop(1))
print("数据删除后的列表内容: %s" % (infos))


程序执行结果:

Traceback (most recent call last):
 File "/tmp/pycharm_project_549/数据分片/列表操作函数.py", line 50, in <module>
   print("执行数据删除pop()函数: %s " % infos.pop(1))
IndexError: pop index out of range




示例二:可以弹0,到最后列表内容为空

infos = ["风哥", "www.guji.work"]
print("数据删除前的列表内容:%s" %(infos))
print("执行数据删除pop()函数: %s " % infos.pop(0))
print("执行数据删除pop()函数: %s " % infos.pop(0))
print("数据删除后的列表内容: %s" % (infos))


程序执行结果:

数据删除前的列表内容:['风哥', 'www.guji.work']
执行数据删除pop()函数: 风哥
执行数据删除pop()函数: www.guji.work
数据删除后的列表内容: []

知识点:

列表中的数据是保存顺序的,列表中所有数据的内容采用的是FIFO(先进先出)默认的顺序操作的,利用列表中的append()和pop()函数就可以方便的实现这样的先进先出的功能。

infos = []
for item in range(10):
   infos.append("风哥 - %d" % item)
print("列表初始化内容: %s" %infos)
print("列表数据弹出处理:")

for item in range(len(infos)):
   print("列表数据弹出: %s" % infos.pop(0))


# 索引会改变,但是从头开始弹出





程序执行结果:

列表初始化内容: ['风哥 - 0', '风哥 - 1', '风哥 - 2', '风哥 - 3', '风哥 - 4', '风哥 - 5', '风哥 - 6', '风哥 - 7', '风哥 - 8', '风哥 - 9']
列表数据弹出处理:
列表数据弹出: 风哥 - 0
列表数据弹出: 风哥 - 1
列表数据弹出: 风哥 - 2
列表数据弹出: 风哥 - 3
列表数据弹出: 风哥 - 4
列表数据弹出: 风哥 - 5
列表数据弹出: 风哥 - 6
列表数据弹出: 风哥 - 7
列表数据弹出: 风哥 - 8
列表数据弹出: 风哥 - 9