Python列表操作详解:索引、查找、修改与进阶技巧
本文系统讲解Python内置列表类型的核心操作。涵盖通过正负索引访问元素、使用index与count进行查找统计、利用append、insert、pop等方法增删改元素,以及reverse与sort排序技巧。重点解析浅拷贝与深拷贝的区别,并介绍random模块实现列表随机打乱,帮助开发者掌握高效的数据结构处理技能。
数据类型定义了值的集合及其上定义的操作集合。数据结构是编程语言的基石,扎实掌握数据结构知识对后续技术学习具有显著的促进作用。
Python内置的常用数据类型包括数字、字符串、Bytes、列表、元组、字典、集合以及布尔值等。
1. 什么是列表
通过下标访问列表元素,语法为lst[#],索引从0开始。若下标超出列表范围,将触发IndexError错误。若使用负数索引,则从列表右侧开始计数,无论正负索引,超出有效范围均会报错。示例代码: lst = list(range(0,9)) # 生成列表 l1 = lst[3] # 通过正索引访问元素 l2 = lst[-1] # 通过负索引访问元素 print(l1) print(l2) # 注意:若正负索引越界,程序将报错。 # 错误示例:IndexError: list index out of range
2. 列表元素查找
查找元素使用L.index( value,[start[stop]])方法,该方法返回查找到的第一个匹配值的索引位置。
参数start表示开始搜索的索引位置,stop表示结束搜索的索引位置,这两个参数均可省略。
若指定了stop参数,则start参数必须存在。索引范围包含start位置,但不包含stop位置。
若未匹配到指定元素,程序将返回ValueError异常,提示xx is not in list。
index方法查找元素的时间复杂度为O(n)。
lst = list(range(11,19)) print(lst) [11, 12, 13, 14, 15, 16, 17, 18] lst.index(13) #13的索引值为2
统计元素出现次数使用L.count(value)方法,用于统计列表中value值出现的频次。
使用len(L)函数可获取列表的长度。
count方法的时间复杂度为O(n)。
3. 列表元素操作
a. 修改元素
通过直接赋值方式修改,语法为L[#]=value。
其中#代表列表的索引值。
索引操作不能越界,否则将报错IndexError: list assignment index out of range。
此操作直接修改列表自身。
lst = list(range(1,10)) lst[2]=111 lst[4]=123 lst [1, 2, 111, 4, 123, 6, 7, 8, 9]
b. 增加元素
L.append(#)方法用于在列表末尾追加元素,直接修改原列表L。
L.extend([#1,#2,#3])方法将可迭代对象的内容扩展到列表末尾。
使用L+[‘a','b','c']语法不修改原列表,而是返回一个包含新元素的新列表。
c. 插入元素
L.insert(idx,#)方法在指定索引idx前插入元素#,直接修改原列表L。
当idx为正数且大于列表当前最大索引时,
行为等同于append方法,将元素插入到列表最末尾;当idx为负数且小于-len(L)+1时,元素将插入到列表最前端。
append方法的时间复杂度为O(1),其执行效率与数据规模无关。
insert方法的时间复杂度为O(n),其执行效率与数据规模正相关。
d. 移除元素
L.remove(value)方法直接修改原列表,从左至右删除第一个匹配到的值。
L.pop(idx)方法返回并删除索引指向的元素。若不指定idx参数,默认删除并返回列表最后一个元素。
pop方法在不指定idx参数时,时间复杂度为O(1);
pop方法在指定idx参数时,时间复杂度为O(n)。
L.clear()方法用于清空列表元素。需谨慎使用,因为可能引发垃圾回收机制。
e. 列表反转
reverse()方法直接修改原列表,将列表元素顺序反转。
f. 列表排序
L.sort()方法执行排序操作,直接修改原列表,默认为升序排列。使用L.sort(reverse=True)可实现逆序排列。
4. 列表进阶
1. 列表复制
copy()方法实现列表的浅拷贝。对于引用类型,仅复制引用地址。当原引用类型的值发生变化时,拷贝后的列表中的对应值也会随之改变。
lst = list(range(4)) lst1 = lst.copy() print(lst1) #浅拷贝特性说明 lst = [1,[2,3,4],5] lst1 = lst.copy() lst1[1][2] = 11 lst[1][0]=22 print(lst) print(lst1) #lst = lst1,引用内的值改变,列表均发生变化。 [0, 1, 2, 3] [1, [22, 3, 11], 5] [1, [22, 3, 11], 5]
copy模块下的deepcopy()函数提供了深拷贝方法,可完全独立复制对象及其内部引用。
import copy lst = [1,[2,3,4],5] lst1 = copy.deepcopy(lst) lst1[1][2] = 11 print(lst) print(lst1) #lst != lst1 对比lst.copy方法。 [1, [2, 3, 4], 5] [1, [2, 3, 11], 5]
2. 打乱列表
实现列表随机打乱需要引入random模块。
# random.shuffle(list)
lst = [1,323,4,-3,[1,3],None,(1,34),{1:3}]
random.shuffle(lst) #修改自身,返回值为None,不能使用其他空间接受。
lst #通过shuffle打乱后列表的顺序发生变化。
[323, {1: 3}, None, [1, 3], 1, -3, 4, (1, 34)]
random模块提供的其他常用对象包括:
import random print(random.randint(1,11)) #返回[1,11] 之间的整数,注意左右闭区间 print(random.choice(range(11))) #从非空序列中随机挑选一个整数 #randrange ([start,] stop [,step]) 从指定的范围内,按指定基数递增的集合中获取一个随机数 random.randrange(1,7,2) #从[1,7)中,步长为2的数字中获取一个数
总结
以上内容介绍了Python内置数据类型中列表的相关操作,希望对读者有所帮助。如有疑问欢迎留言,小编会及时回复。感谢大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









