Python列表操作详解:索引、查找、修改与进阶技巧

蓝鲸
蓝鲸
发布时间:2026-10-13| 5人浏览过
原创

本文系统讲解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内置数据类型中列表的相关操作,希望对读者有所帮助。如有疑问欢迎留言,小编会及时回复。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。