P2A-Python列表-什么是列表?切片为什么这么强大?怎么快速掌握增删改查?
📝 摘要
面向零基础,系统讲解 Python 列表(List)核心技能:创建、索引、切片、增删改查、排序、反转。通过生活化比喻与实战对比,掌握强大的切片技巧和高效的数据操作方法,快速提升编程能力。
目录
- 1. 前置知识点
- 2. 快速上手(3 分钟)
- 3. 什么是列表(List(列表))
- 4. 列表创建(list creation(列表创建))
- 5. 列表索引(list indexing(列表索引))
- 6. 列表切片(list slicing(列表切片))
- 7. 列表增加元素(adding elements(增加元素))
- 8. 列表删除元素(removing elements(删除元素))
- 9. 列表修改元素(modifying elements(修改元素))
- 10. 列表查找元素(finding elements(查找元素))
- 11. 列表排序(sorting(排序))
- 12. 列表反转(reversing(反转))
- 13. 列表 vs 不使用列表对比
- 14. 常见错误与对比修正
- 15. 选择建议与实践流程
- 16. 📚 参考资料与学习资源
- 17. 总结
1. 前置知识点
在深入学习 Python 列表之前,你需要了解以下基础概念:
- 变量(variable(变量)):用于存储数据的容器,就像生活中的 盒子,可以在里面存放不同的物品
- 数据类型(data type(数据类型)):Python 中的基本数据类型包括整数、浮点数、字符串等
- 索引(index(索引)):用于定位元素位置的编号,从 0 开始计数
- 序列(sequence(序列)):有序的数据集合,列表、字符串、元组都是序列类型
💡 学习建议:如果你已经掌握了 Python 变量和基本数据类型,就可以开始学习列表了。列表是 Python 最常用的数据结构,是后续学习其他数据结构的基础。
2. 快速上手(3 分钟)
🔥 Must(必做实践)|依赖:任意 Python 3 版本
目的:用一个最小示例快速了解列表的核心操作——
- 创建列表:使用方括号
[]创建列表 - 访问元素:使用索引获取列表中的元素
- 切片操作:使用切片获取列表的子集
- 增删改查:掌握列表的基本操作方法
# 创建列表:就像创建一个装物品的盒子
fruits = ['苹果', '香蕉', '橙子']
print(f"水果列表:{fruits}") # 输出:水果列表:['苹果', '香蕉', '橙子']
# 访问元素:使用索引(从 0 开始)
print(f"第一个水果:{fruits[0]}") # 输出:第一个水果:苹果
print(f"最后一个水果:{fruits[-1]}") # 输出:最后一个水果:橙子
# 切片操作:获取列表的一部分
print(f"前两个水果:{fruits[0:2]}") # 输出:前两个水果:['苹果', '香蕉']
print(f"反转列表:{fruits[::-1]}") # 输出:反转列表:['橙子', '香蕉', '苹果']
# 增加元素:在列表末尾添加
fruits.append('葡萄')
print(f"添加后:{fruits}") # 输出:添加后:['苹果', '香蕉', '橙子', '葡萄']
# 删除元素:删除指定元素
fruits.remove('香蕉')
print(f"删除后:{fruits}") # 输出:删除后:['苹果', '橙子', '葡萄']
# 修改元素:通过索引修改
fruits[0] = '西瓜'
print(f"修改后:{fruits}") # 输出:修改后:['西瓜', '橙子', '葡萄']
输出结果:
水果列表:['苹果', '香蕉', '橙子']
第一个水果:苹果
最后一个水果:橙子
前两个水果:['苹果', '香蕉']
反转列表:['橙子', '香蕉', '苹果']
添加后:['苹果', '香蕉', '橙子', '葡萄']
删除后:['苹果', '橙子', '葡萄']
修改后:['西瓜', '橙子', '葡萄']
列表的价值:高效管理多个数据
列表就像程序中的 购物车,可以存放多个商品(元素),可以随时添加、删除、修改商品,还可以快速查找和排序。掌握了列表,你就能高效地处理大量数据。
3. 什么是列表(List(列表))?
在深入学习 Python 列表之前,让我们先理解 列表(List(列表)) 的本质和重要性。
列表的定义
列表(List(列表)) 是 Python 中用于存储多个元素的有序集合,使用方括号 [] 创建,元素之间用逗号分隔。列表中的元素可以是任意数据类型(整数、浮点数、字符串、甚至其他列表),并且列表是可变的(mutable(可变的)),可以随时添加、删除、修改元素。
列表的特点
列表就像生活中的 购物清单 或 书架,具有以下特点:
- 有序(ordered(有序)):列表中的元素按照添加顺序排列,每个元素都有固定的位置
- 可变(mutable(可变的)):可以随时添加、删除、修改列表中的元素
- 可重复(allows duplicates(允许重复)):同一个元素可以在列表中出现多次
- 索引访问(indexed(可索引)):可以通过索引快速访问列表中的任意元素
列表的作用
列表就像程序中的 多功能工具箱,让你能够:
- 存储多个数据:一次性管理大量相关的数据
- 快速访问元素:通过索引快速获取特定位置的元素
- 灵活操作数据:可以随时添加、删除、修改数据
- 高效处理数据:支持排序、反转、查找等高级操作
列表的重要性
想象一下,如果没有列表,处理多个数据会是什么样子:
# 没有列表的世界(繁琐且低效)
student1 = "张三"
student2 = "李四"
student3 = "王五"
# 要处理 100 个学生,需要定义 100 个变量!
# 打印所有学生(需要逐个打印)
print(student1)
print(student2)
print(student3)
# ... 要写 100 行代码!
有了列表,代码变得简洁高效:
# 使用列表(简洁高效)
students = ["张三", "李四", "王五", ...] # 一个变量存储所有学生
# 打印所有学生(一行代码)
for student in students:
print(student)
# 无论有多少学生,代码都一样简洁!
列表让数据管理变得简单高效,是 Python 编程中最重要的数据结构之一。
Python 列表的优势
Python 的列表相比其他编程语言的数组或列表,具有以下优势:
- 动态大小:列表长度可以动态增长或缩减,不需要预先指定大小
- 类型灵活:列表中可以存放不同类型的元素,不需要统一类型
- 丰富的操作:提供了大量内置方法,如
append()、sort()、reverse()等 - 切片支持:大厂程序员都在使用的切片功能,可以快速获取子列表
💡 核心概念:列表是 Python 中最常用的数据结构,掌握列表的使用是 Python 编程的基础。大厂程序员都在用切片来处理列表,因为切片可以简洁地获取、反转、复制列表,大大提高了代码的可读性和效率。
4. 列表创建(list creation(列表创建))
🔥 Must(必做实践)|依赖:任意 Python 3 版本
创建列表就像创建一个 空盒子 或 购物车,可以往里面放入各种物品。Python 提供了多种创建列表的方式,每种方式都有其适用场景。
4.1 基本创建方式
使用方括号 [] 创建列表是最常用、最直观的方式。
基本语法:
列表名 = [元素1, 元素2, 元素3, ...]
示例:创建不同类型的列表
# 创建空列表:就像创建一个空盒子
empty_list = []
print(f"空列表:{empty_list}") # 输出:空列表:[]
# 创建整数列表:存储数字
numbers = [1, 2, 3, 4, 5]
print(f"数字列表:{numbers}") # 输出:数字列表:[1, 2, 3, 4, 5]
# 创建字符串列表:存储文本
fruits = ['苹果', '香蕉', '橙子']
print(f"水果列表:{fruits}") # 输出:水果列表:['苹果', '香蕉', '橙子']
# 创建混合类型列表:可以包含不同类型
mixed = [1, 'hello', 3.14, True]
print(f"混合列表:{mixed}") # 输出:混合列表:[1, 'hello', 3.14, True]
输出结果:
空列表:[]
数字列表:[1, 2, 3, 4, 5]
水果列表:['苹果', '香蕉', '橙子']
混合列表:[1, 'hello', 3.14, True]
4.2 使用 list() 构造函数
使用 list() 构造函数可以从其他可迭代对象(如字符串、元组、范围等)创建列表。
基本语法:
列表名 = list(可迭代对象)
示例:使用 list() 构造函数
# 从字符串创建列表:每个字符成为一个元素
chars = list("Python")
print(f"字符列表:{chars}") # 输出:字符列表:['P', 'y', 't', 'h', 'o', 'n']
# 从范围对象创建列表:生成数字序列
numbers = list(range(5))
print(f"范围列表:{numbers}") # 输出:范围列表:[0, 1, 2, 3, 4]
# 从元组创建列表:转换元组为列表
tuple_data = (1, 2, 3)
list_data = list(tuple_data)
print(f"从元组创建:{list_data}") # 输出:从元组创建:[1, 2, 3]
# 创建空列表(两种方式等效)
empty1 = []
empty2 = list()
print(f"方式1:{empty1}, 方式2:{empty2}") # 输出:方式1:[], 方式2:[]
输出结果:
字符列表:['P', 'y', 't', 'h', 'o', 'n']
范围列表:[0, 1, 2, 3, 4]
从元组创建:[1, 2, 3]
方式1:[], 方式2:[]
使用场景:
- 从字符串、元组等其他数据结构转换
- 从
range()等生成器对象创建列表 - 当需要明确调用构造函数时
4.3 列表推导式创建
列表推导式(List Comprehension(列表推导式))是一种简洁、高效的创建列表的方式,可以用一行代码生成复杂的列表。
基本语法:
列表名 = [表达式 for 变量 in 可迭代对象 if 条件]
示例:列表推导式的各种用法
# 生成平方数列表:简洁高效
squares = [x**2 for x in range(5)]
print(f"平方数列表:{squares}") # 输出:平方数列表:[0, 1, 4, 9, 16]
# 生成偶数列表:带条件判断
evens = [x for x in range(10) if x % 2 == 0]
print(f"偶数列表:{evens}") # 输出:偶数列表:[0, 2, 4, 6, 8]
# 字符串处理:将字符串转换为大写
words = ['hello', 'world', 'python']
uppers = [word.upper() for word in words]
print(f"大写列表:{uppers}") # 输出:大写列表:['HELLO', 'WORLD', 'PYTHON']
输出结果:
平方数列表:[0, 1, 4, 9, 16]
偶数列表:[0, 2, 4, 6, 8]
大写列表:['HELLO', 'WORLD', 'PYTHON']
列表推导式的优势:
- 代码简洁:一行代码完成循环和条件判断
- 可读性强:表达意图清晰
- 性能较好:比循环 +
append()更快
对比示例:列表推导式 vs 传统循环
# ❌ 不使用列表推导式(繁琐)
squares = []
for x in range(5):
squares.append(x**2)
# ✅ 使用列表推导式(简洁)
squares = [x**2 for x in range(5)]
两种方式结果相同,但列表推导式更简洁高效。
5. 列表索引(list indexing(列表索引))
🔥 Must(必做实践)|依赖:任意 Python 3 版本
列表索引就像书籍的 页码 或 门牌号,用于精确定位列表中的元素。Python 的列表索引从 0 开始,支持正向索引和负向索引两种方式。
5.1 正向索引
正向索引从列表的第一个元素开始,索引从 0 开始计数,依次递增。
索引示意图:
列表:['苹果', '香蕉', '橙子', '葡萄']
索引: 0 1 2 3
示例:使用正向索引访问元素
fruits = ['苹果', '香蕉', '橙子', '葡萄']
# 访问第一个元素(索引 0)
print(f"第一个水果:{fruits[0]}") # 输出:第一个水果:苹果
# 访问第二个元素(索引 1)
print(f"第二个水果:{fruits[1]}") # 输出:第二个水果:香蕉
# 访问第三个元素(索引 2)
print(f"第三个水果:{fruits[2]}") # 输出:第三个水果:橙子
# 访问第四个元素(索引 3)
print(f"第四个水果:{fruits[3]}") # 输出:第四个水果:葡萄
输出结果:
第一个水果:苹果
第二个水果:香蕉
第三个水果:橙子
第四个水果:葡萄
关键要点:
- 索引从 0 开始,不是 1
- 第一个元素的索引是 0
- 最后一个元素的索引是 列表长度 - 1
5.2 负向索引
负向索引从列表的最后一个元素开始,索引从 -1 开始,依次递减。负向索引就像从后往前数。
索引示意图:
列表:['苹果', '香蕉', '橙子', '葡萄']
正向: 0 1 2 3
负向: -4 -3 -2 -1
示例:使用负向索引访问元素
fruits = ['苹果', '香蕉', '橙子', '葡萄']
# 访问最后一个元素(索引 -1)
print(f"最后一个水果:{fruits[-1]}") # 输出:最后一个水果:葡萄
# 访问倒数第二个元素(索引 -2)
print(f"倒数第二个水果:{fruits[-2]}") # 输出:倒数第二个水果:橙子
# 访问倒数第三个元素(索引 -3)
print(f"倒数第三个水果:{fruits[-3]}") # 输出:倒数第三个水果:香蕉
# 访问第一个元素(索引 -4,等于索引 0)
print(f"第一个水果(负向):{fruits[-4]}") # 输出:第一个水果(负向):苹果
输出结果:
最后一个水果:葡萄
倒数第二个水果:橙子
倒数第三个水果:香蕉
第一个水果(负向):苹果
负向索引的优势:
- 快速访问列表末尾的元素,无需知道列表长度
- 代码更简洁,
fruits[-1]比fruits[len(fruits)-1]更直观 - 大厂程序员都在使用负向索引访问最后一个元素
5.3 索引越界处理
当访问的索引超出列表范围时,会抛出 IndexError 异常。需要正确处理索引越界的情况。
示例:索引越界错误
fruits = ['苹果', '香蕉', '橙子']
# ❌ 索引越界:列表只有 3 个元素(索引 0-2),访问索引 3 会报错
try:
print(fruits[3]) # IndexError: list index out of range
except IndexError as e:
print(f"错误:{e}") # 输出:错误:list index out of range
# ❌ 负向索引越界:访问索引 -4(列表只有 3 个元素)
try:
print(fruits[-4]) # IndexError: list index out of range
except IndexError as e:
print(f"错误:{e}") # 输出:错误:list index out of range
输出结果:
错误:list index out of range
错误:list index out of range
安全的索引访问方法:
fruits = ['苹果', '香蕉', '橙子']
# 方法 1:检查索引范围
index = 3
if 0 <= index < len(fruits):
print(fruits[index])
else:
print("索引超出范围")
# 方法 2:使用 try-except 捕获异常
try:
print(fruits[3])
except IndexError:
print("索引超出范围")
# 方法 3:使用负向索引的安全方式(推荐)
if len(fruits) > 0:
print(f"最后一个元素:{fruits[-1]}") # 安全访问
对比示例:不安全 vs 安全的索引访问
# ❌ 不安全的索引访问(可能出错)
fruits = ['苹果', '香蕉']
last = fruits[2] # 索引越界,程序崩溃!
# ✅ 安全的索引访问(推荐)
fruits = ['苹果', '香蕉']
if len(fruits) > 0:
last = fruits[-1] # 使用负向索引,安全可靠
print(f"最后一个元素:{last}")
6. 列表切片(list slicing(列表切片))
🔥 Must(必做实践)|依赖:任意 Python 3 版本
**列表切片是 Python 列表最强大的功能之一,大厂程序员都在使用切片来高效处理列表数据。**切片就像用 刀切蛋糕,可以从列表中切出一部分元素,创建新的列表。切片不会修改原列表,而是返回一个新的列表。
6.1 基本切片语法
切片使用方括号 [] 和冒号 : 来指定要获取的元素范围。
基本语法:
列表[起始索引:结束索引:步长]
关键规则:
- 起始索引(start):切片开始的位置(包含)
- 结束索引(stop):切片结束的位置(不包含)
- 步长(step):每次跳过的元素数量(可选,默认为 1)
示例:基本切片操作
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 获取索引 1 到 4 的元素(不包含索引 4)
subset = numbers[1:4]
print(f"切片 [1:4]:{subset}") # 输出:切片 [1:4]:[1, 2, 3]
# 获取前 3 个元素(索引 0 到 3,不包含 3)
first_three = numbers[0:3]
print(f"前三个元素:{first_three}") # 输出:前三个元素:[0, 1, 2]
# 获取从索引 5 到末尾的元素
from_five = numbers[5:]
print(f"从索引 5 开始:{from_five}") # 输出:从索引 5 开始:[5, 6, 7, 8, 9]
# 获取到索引 5 为止的元素(不包含索引 5)
until_five = numbers[:5]
print(f"到索引 5 为止:{until_five}") # 输出:到索引 5 为止:[0, 1, 2, 3, 4]
# 获取整个列表(复制列表)
copy = numbers[:]
print(f"复制列表:{copy}") # 输出:复制列表:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
输出结果:
切片 [1:4]:[1, 2, 3]
前三个元素:[0, 1, 2]
从索引 5 开始:[5, 6, 7, 8, 9]
到索引 5 为止:[0, 1, 2, 3, 4]
复制列表:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
6.2 切片参数详解
切片参数的完整语法:
列表[start:stop:step]
参数说明:
| 参数 | 说明 | 默认值 | 示例 |
|---|---|---|---|
start | 起始索引(包含) | 0 | numbers[2:] 从索引 2 开始 |
stop | 结束索引(不包含) | 列表长度 | numbers[:5] 到索引 5(不含) |
step | 步长(每次跳过的元素数) | 1 | numbers[::2] 每隔一个元素 |
重要:结束索引不包含
numbers = [0, 1, 2, 3, 4, 5]
# 切片 [1:4] 包含索引 1、2、3,不包含索引 4
result = numbers[1:4]
print(f"[1:4] 的结果:{result}") # 输出:[1, 2, 3](只有 3 个元素)
# 要包含索引 4,需要使用 [1:5]
result2 = numbers[1:5]
print(f"[1:5] 的结果:{result2}") # 输出:[1, 2, 3, 4](包含索引 4)
示例:不同参数组合
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 1. 指定起始和结束索引
print(f"[2:6]:{numbers[2:6]}") # 输出:[2:6]:[2, 3, 4, 5]
# 2. 只指定起始索引(到末尾)
print(f"[3:]:{numbers[3:]}") # 输出:[3:]:[3, 4, 5, 6, 7, 8, 9]
# 3. 只指定结束索引(从开头)
print(f"[:5]:{numbers[:5]}") # 输出:[:5]:[0, 1, 2, 3, 4]
# 4. 使用负向索引
print(f"[-3:]:{numbers[-3:]}") # 输出:[-3:]:[7, 8, 9](最后三个)
# 5. 指定步长
print(f"[::2]:{numbers[::2]}") # 输出:[::2]:[0, 2, 4, 6, 8](每隔一个)
输出结果:
[2:6]:[2, 3, 4, 5]
[3:]:[3, 4, 5, 6, 7, 8, 9]
[:5]:[0, 1, 2, 3, 4]
[-3:]:[7, 8, 9]
[::2]:[0, 2, 4, 6, 8]
6.3 切片高级用法
1. 反转列表
使用步长为 -1 的切片可以快速反转列表,这是大厂程序员常用的技巧。
numbers = [1, 2, 3, 4, 5]
# 使用切片反转列表
reversed_list = numbers[::-1]
print(f"反转列表:{reversed_list}") # 输出:反转列表:[5, 4, 3, 2, 1]
# 原列表不变
print(f"原列表:{numbers}") # 输出:原列表:[1, 2, 3, 4, 5]
2. 每隔 N 个元素获取
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 每隔 2 个元素获取(步长为 2)
evens = numbers[::2]
print(f"偶数索引元素:{evens}") # 输出:偶数索引元素:[0, 2, 4, 6, 8]
# 每隔 3 个元素获取(步长为 3)
thirds = numbers[::3]
print(f"每隔三个:{thirds}") # 输出:每隔三个:[0, 3, 6, 9]
3. 复制列表
使用 [:] 可以快速创建列表的浅拷贝(shallow copy(浅拷贝))。
original = [1, 2, 3, 4, 5]
# 复制列表
copy = original[:]
print(f"复制列表:{copy}") # 输出:复制列表:[1, 2, 3, 4, 5]
# 修改复制列表不会影响原列表
copy.append(6)
print(f"原列表:{original}") # 输出:原列表:[1, 2, 3, 4, 5]
print(f"复制列表:{copy}") # 输出:复制列表:[1, 2, 3, 4, 5, 6]
4. 反向切片
使用负步长可以从后往前切片。
numbers = [0, 1, 2, 3, 4, 5]
# 从索引 4 到索引 1(反向,不包含索引 1)
reverse_slice = numbers[4:1:-1]
print(f"反向切片 [4:1:-1]:{reverse_slice}") # 输出:反向切片 [4:1:-1]:[4, 3, 2]
对比示例:不使用切片 vs 使用切片
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# ❌ 不使用切片(繁琐)
# 获取前 3 个元素
first_three = []
for i in range(3):
first_three.append(numbers[i])
# 反转列表
reversed_list = []
for i in range(len(numbers) - 1, -1, -1):
reversed_list.append(numbers[i])
# ✅ 使用切片(简洁高效)
first_three = numbers[:3] # 一行代码!
reversed_list = numbers[::-1] # 一行代码!
切片的优势:
- 代码简洁:一行代码完成复杂操作
- 性能高效:切片操作是内置的,执行速度快
- 可读性强:意图清晰,易于理解
- 不修改原列表:切片返回新列表,原列表不变
大厂程序员为什么都用切片:
- 效率高:切片是 Python 内置操作,比循环快得多
- 代码简洁:一行代码替代多行循环
- 可读性强:
numbers[::-1]比循环反转更直观 - 功能强大:可以实现复制、反转、分段等多种操作
7. 列表增加元素(adding elements(增加元素))
🔥 Must(必做实践)|依赖:任意 Python 3 版本
列表增加元素就像往 购物车 中添加商品,Python 提供了三种主要方法:append()、insert() 和 extend(),每种方法都有其适用场景。
7.1 append() 方法
append() 方法在列表的 末尾 添加一个元素,就像在购物车最后放入一个商品。
基本语法:
列表.append(元素)
示例:使用 append() 添加元素
fruits = ['苹果', '香蕉']
# 在列表末尾添加一个元素
fruits.append('橙子')
print(f"添加后:{fruits}") # 输出:添加后:['苹果', '香蕉', '橙子']
# 继续添加
fruits.append('葡萄')
print(f"再次添加:{fruits}") # 输出:再次添加:['苹果', '香蕉', '橙子', '葡萄']
输出结果:
添加后:['苹果', '香蕉', '橙子']
再次添加:['苹果', '香蕉', '橙子', '葡萄']
append() 的特点:
- 在末尾添加:总是在列表最后添加元素
- 每次添加一个:一次只能添加一个元素
- 修改原列表:直接修改原列表,不返回新列表
- 最常用:是最常用的添加元素方法
7.2 insert() 方法
insert() 方法在列表的 指定位置 插入一个元素,就像在购物车的某个位置插入一个商品。
基本语法:
列表.insert(索引, 元素)
示例:使用 insert() 插入元素
fruits = ['苹果', '香蕉', '橙子']
# 在索引 1 的位置插入 '葡萄'
fruits.insert(1, '葡萄')
print(f"插入后:{fruits}") # 输出:插入后:['苹果', '葡萄', '香蕉', '橙子']
# 在列表开头插入(索引 0)
fruits.insert(0, '西瓜')
print(f"开头插入:{fruits}") # 输出:开头插入:['西瓜', '苹果', '葡萄', '香蕉', '橙子']
输出结果:
插入后:['苹果', '葡萄', '香蕉', '橙子']
开头插入:['西瓜', '苹果', '葡萄', '香蕉', '橙子']
insert() 的特点:
- 指定位置插入:可以在任意位置插入元素
- 插入后元素后移:插入位置的元素及其后面的元素都会后移
- 索引可以超出范围:如果索引超出列表长度,会在末尾添加(类似 append)
7.3 extend() 方法
extend() 方法将另一个可迭代对象的所有元素添加到列表末尾,就像把另一个购物车的所有商品都放入当前购物车。
基本语法:
列表.extend(可迭代对象)
示例:使用 extend() 扩展列表
fruits = ['苹果', '香蕉']
# 添加另一个列表的所有元素
more_fruits = ['橙子', '葡萄', '西瓜']
fruits.extend(more_fruits)
print(f"扩展后:{fruits}") # 输出:扩展后:['苹果', '香蕉', '橙子', '葡萄', '西瓜']
# 也可以添加字符串(字符串会被拆分为字符)
fruits.extend('abc')
print(f"添加字符串:{fruits}") # 输出:添加字符串:['苹果', '香蕉', '橙子', '葡萄', '西瓜', 'a', 'b', 'c']
输出结果:
扩展后:['苹果', '香蕉', '橙子', '葡萄', '西瓜']
添加字符串:['苹果', '香蕉', '橙子', '葡萄', '西瓜', 'a', 'b', 'c']
extend() vs append() 对比
# ❌ 错误:append() 会将整个列表作为一个元素添加
fruits = ['苹果', '香蕉']
fruits.append(['橙子', '葡萄'])
print(fruits) # 输出:['苹果', '香蕉', ['橙子', '葡萄']](嵌套列表)
# ✅ 正确:extend() 会添加列表中的每个元素
fruits = ['苹果', '香蕉']
fruits.extend(['橙子', '葡萄'])
print(fruits) # 输出:['苹果', '香蕉', '橙子', '葡萄'](扁平列表)
三种方法的选择建议:
| 方法 | 适用场景 | 示例 |
|---|---|---|
append() | 在末尾添加单个元素 | fruits.append('橙子') |
insert() | 在指定位置插入元素 | fruits.insert(1, '葡萄') |
extend() | 添加多个元素(来自列表、元组等) | fruits.extend(['橙子', '葡萄']) |
对比示例:不使用列表方法 vs 使用列表方法
fruits = ['苹果', '香蕉']
# ❌ 不使用列表方法(繁琐且易错)
# 在末尾添加元素需要手动计算索引
fruits = fruits + ['橙子'] # 创建新列表,效率低
# ✅ 使用列表方法(简洁高效)
fruits.append('橙子') # 直接修改原列表,效率高
8. 列表删除元素(removing elements(删除元素))
🔥 Must(必做实践)|依赖:任意 Python 3 版本
列表删除元素就像从 购物车 中移除商品,Python 提供了四种主要方法:remove()、pop()、del 和 clear(),每种方法都有其适用场景。
8.1 remove() 方法
remove() 方法删除列表中 第一个匹配的元素(按值删除)。
基本语法:
列表.remove(元素值)
示例:使用 remove() 删除元素
fruits = ['苹果', '香蕉', '橙子', '香蕉']
# 删除第一个 '香蕉'
fruits.remove('香蕉')
print(f"删除后:{fruits}") # 输出:删除后:['苹果', '橙子', '香蕉']
# 如果元素不存在,会抛出 ValueError
try:
fruits.remove('西瓜') # 列表中不存在 '西瓜'
except ValueError as e:
print(f"错误:{e}") # 输出:错误:list.remove(x): x not in list
输出结果:
删除后:['苹果', '橙子', '香蕉']
错误:list.remove(x): x not in list
remove() 的特点:
- 按值删除:删除指定值的元素,不是按索引
- 只删除第一个:如果列表中有重复元素,只删除第一个匹配的
- 元素不存在会报错:需要确保元素存在或使用异常处理
8.2 pop() 方法
pop() 方法删除并返回指定索引的元素。如果不指定索引,默认删除并返回最后一个元素。
基本语法:
元素 = 列表.pop([索引]) # 索引可选,默认删除最后一个
示例:使用 pop() 删除元素
fruits = ['苹果', '香蕉', '橙子', '葡萄']
# 删除并返回最后一个元素
last_fruit = fruits.pop()
print(f"删除的元素:{last_fruit}") # 输出:删除的元素:葡萄
print(f"删除后:{fruits}") # 输出:删除后:['苹果', '香蕉', '橙子']
# 删除并返回指定索引的元素
second_fruit = fruits.pop(1)
print(f"删除的元素:{second_fruit}") # 输出:删除的元素:香蕉
print(f"删除后:{fruits}") # 输出:删除后:['苹果', '橙子']
输出结果:
删除的元素:葡萄
删除后:['苹果', '香蕉', '橙子']
删除的元素:香蕉
删除后:['苹果', '橙子']
pop() 的特点:
- 按索引删除:删除指定位置的元素
- 返回被删除的元素:可以获取被删除的元素值
- 默认删除最后一个:不指定索引时删除最后一个元素(常用作栈操作)
8.3 del 语句
del 语句是 Python 的关键字,可以删除指定索引的元素或整个列表。
基本语法:
del 列表[索引] # 删除指定元素
del 列表[起始:结束] # 删除切片范围
del 列表 # 删除整个列表
示例:使用 del 删除元素
fruits = ['苹果', '香蕉', '橙子', '葡萄']
# 删除指定索引的元素
del fruits[1]
print(f"删除索引1后:{fruits}") # 输出:删除索引1后:['苹果', '橙子', '葡萄']
# 删除切片范围(删除索引 0 到 1 的元素,不包含索引 1)
del fruits[0:1]
print(f"删除切片后:{fruits}") # 输出:删除切片后:['橙子', '葡萄']
# 删除整个列表
del fruits
# print(fruits) # 会报错:NameError: name 'fruits' is not defined
输出结果:
删除索引1后:['苹果', '橙子', '葡萄']
删除切片后:['橙子', '葡萄']
del vs remove() vs pop() 对比:
| 方法 | 删除方式 | 返回值 | 适用场景 |
|---|---|---|---|
remove() | 按值删除 | 无(None) | 知道元素值,删除第一个匹配 |
pop() | 按索引删除 | 被删除的元素 | 需要获取被删除的元素值 |
del | 按索引或切片删除 | 无 | 直接删除,不需要返回值 |
8.4 clear() 方法
clear() 方法清空列表中的所有元素,但保留列表对象(列表变为空列表)。
基本语法:
列表.clear()
示例:使用 clear() 清空列表
fruits = ['苹果', '香蕉', '橙子']
# 清空列表
fruits.clear()
print(f"清空后:{fruits}") # 输出:清空后:[]
print(f"列表是否为空:{len(fruits) == 0}") # 输出:列表是否为空:True
输出结果:
清空后:[]
列表是否为空:True
clear() vs del 列表 对比:
fruits1 = ['苹果', '香蕉']
fruits1.clear()
print(fruits1) # 输出:[](列表存在,只是为空)
fruits2 = ['苹果', '香蕉']
del fruits2
# print(fruits2) # 报错:列表对象被完全删除
9. 列表修改元素(modifying elements(修改元素))
🔥 Must(必做实践)|依赖:任意 Python 3 版本
列表修改元素非常简单,直接通过索引赋值即可,就像替换购物车中某个位置的商品。
基本语法:
列表[索引] = 新值
示例:修改列表元素
fruits = ['苹果', '香蕉', '橙子']
# 修改索引 1 的元素
fruits[1] = '葡萄'
print(f"修改后:{fruits}") # 输出:修改后:['苹果', '葡萄', '橙子']
# 修改第一个元素
fruits[0] = '西瓜'
print(f"再次修改:{fruits}") # 输出:再次修改:['西瓜', '葡萄', '橙子']
输出结果:
修改后:['苹果', '葡萄', '橙子']
再次修改:['西瓜', '葡萄', '橙子']
修改多个元素(使用切片):
numbers = [1, 2, 3, 4, 5]
# 使用切片修改多个元素
numbers[1:4] = [20, 30, 40]
print(f"批量修改后:{numbers}") # 输出:批量修改后:[1, 20, 30, 40, 5]
对比示例:不使用索引 vs 使用索引
# ❌ 不使用索引修改(无法实现)
# 无法直接替换列表中的元素
# ✅ 使用索引修改(简洁直接)
fruits = ['苹果', '香蕉']
fruits[0] = '橙子' # 直接替换,简单高效
10. 列表查找元素(finding elements(查找元素))
⭐ Should(建议实践)|依赖:任意 Python 3 版本
列表查找元素就像在 购物车 中寻找特定商品,Python 提供了多种查找方法。
10.1 index() 方法
index() 方法返回元素在列表中 第一次出现 的索引位置。
基本语法:
索引 = 列表.index(元素, [起始索引], [结束索引])
示例:使用 index() 查找元素
fruits = ['苹果', '香蕉', '橙子', '香蕉']
# 查找 '香蕉' 的索引(返回第一个)
index = fruits.index('香蕉')
print(f"'香蕉' 的索引:{index}") # 输出:'香蕉' 的索引:1
# 查找 '橙子' 的索引
index = fruits.index('橙子')
print(f"'橙子' 的索引:{index}") # 输出:'橙子' 的索引:2
# 在指定范围内查找
index = fruits.index('香蕉', 2) # 从索引 2 开始查找
print(f"从索引2开始查找'香蕉':{index}") # 输出:从索引2开始查找'香蕉':3
输出结果:
'香蕉' 的索引:1
'橙子' 的索引:2
从索引2开始查找'香蕉':3
index() 的特点:
- 返回第一个匹配:如果元素重复,只返回第一个的索引
- 元素不存在会报错:需要确保元素存在或使用异常处理
- 可以指定范围:可以在指定范围内查找
10.2 count() 方法
count() 方法返回元素在列表中出现的次数。
基本语法:
次数 = 列表.count(元素)
示例:使用 count() 统计元素
fruits = ['苹果', '香蕉', '橙子', '香蕉', '香蕉']
# 统计 '香蕉' 出现的次数
count = fruits.count('香蕉')
print(f"'香蕉' 出现 {count} 次") # 输出:'香蕉' 出现 3 次
# 统计 '苹果' 出现的次数
count = fruits.count('苹果')
print(f"'苹果' 出现 {count} 次") # 输出:'苹果' 出现 1 次
# 统计不存在的元素
count = fruits.count('西瓜')
print(f"'西瓜' 出现 {count} 次") # 输出:'西瓜' 出现 0 次
输出结果:
'香蕉' 出现 3 次
'苹果' 出现 1 次
'西瓜' 出现 0 次
10.3 in 和 not in 运算符
in 和 not in 运算符用于检查元素是否在列表中,返回布尔值(True 或 False)。
基本语法:
元素 in 列表 # 元素在列表中返回 True
元素 not in 列表 # 元素不在列表中返回 True
示例:使用 in 和 not in 检查元素
fruits = ['苹果', '香蕉', '橙子']
# 检查元素是否在列表中
print(f"'苹果' 在列表中:{'苹果' in fruits}") # 输出:'苹果' 在列表中:True
print(f"'西瓜' 在列表中:{'西瓜' in fruits}") # 输出:'西瓜' 在列表中:False
# 使用 not in
print(f"'西瓜' 不在列表中:{'西瓜' not in fruits}") # 输出:'西瓜' 不在列表中:True
# 在条件判断中使用
if '苹果' in fruits:
print("找到了苹果!")
else:
print("没有找到苹果")
输出结果:
'苹果' 在列表中:True
'西瓜' 在列表中:False
'西瓜' 不在列表中:True
找到了苹果!
查找方法的选择建议:
| 方法 | 返回值 | 适用场景 |
|---|---|---|
index() | 索引(整数) | 需要知道元素的位置 |
count() | 次数(整数) | 需要统计元素出现次数 |
in/not in | 布尔值(True/False) | 只需要判断元素是否存在(最常用) |
11. 列表排序(sorting(排序))
⭐ Should(建议实践)|依赖:任意 Python 3 版本
列表排序就像把购物车中的商品按照价格或名称排序,Python 提供了 sort() 方法和 sorted() 函数两种方式。
11.1 sort() 方法
sort() 方法对列表进行 原地排序(in-place sorting(原地排序)),直接修改原列表,不返回新列表。
基本语法:
列表.sort(key=None, reverse=False)
示例:使用 sort() 排序
numbers = [5, 2, 9, 1, 7]
# 升序排序(默认)
numbers.sort()
print(f"升序排序:{numbers}") # 输出:升序排序:[1, 2, 5, 7, 9]
# 降序排序
numbers.sort(reverse=True)
print(f"降序排序:{numbers}") # 输出:降序排序:[9, 7, 5, 2, 1]
# 字符串列表排序(按字母顺序)
fruits = ['香蕉', '苹果', '橙子', '葡萄']
fruits.sort()
print(f"字符串排序:{fruits}") # 输出:字符串排序:['橙子', '苹果', '葡萄', '香蕉']
输出结果:
升序排序:[1, 2, 5, 7, 9]
降序排序:[9, 7, 5, 2, 1]
字符串排序:['橙子', '苹果', '葡萄', '香蕉']
sort() 的特点:
- 修改原列表:直接修改原列表,不返回新列表
- 原地排序:不需要额外的内存空间
- 返回 None:方法本身返回
None
11.2 sorted() 函数
sorted() 函数对列表进行排序,不修改原列表,返回一个新的排序后的列表。
基本语法:
新列表 = sorted(列表, key=None, reverse=False)
示例:使用 sorted() 排序
numbers = [5, 2, 9, 1, 7]
# 升序排序(返回新列表)
sorted_numbers = sorted(numbers)
print(f"原列表:{numbers}") # 输出:原列表:[5, 2, 9, 1, 7]
print(f"排序后:{sorted_numbers}") # 输出:排序后:[1, 2, 5, 7, 9]
# 降序排序
sorted_desc = sorted(numbers, reverse=True)
print(f"降序排序:{sorted_desc}") # 输出:降序排序:[9, 7, 5, 2, 1]
输出结果:
原列表:[5, 2, 9, 1, 7]
排序后:[1, 2, 5, 7, 9]
降序排序:[9, 7, 5, 2, 1]
sorted() 的特点:
- 不修改原列表:原列表保持不变
- 返回新列表:返回排序后的新列表
- 可以排序任意可迭代对象:不仅限于列表
11.3 排序方法对比
sort() vs sorted() 对比:
| 特性 | sort() 方法 | sorted() 函数 |
|---|---|---|
| 修改原列表 | ✅ 是 | ❌ 否 |
| 返回值 | None | 新列表 |
| 内存使用 | 较少(原地排序) | 较多(创建新列表) |
| 适用场景 | 需要修改原列表时 | 需要保留原列表时 |
选择建议:
- 使用
sort():当你想要直接修改原列表,不需要保留原始顺序时 - 使用
sorted():当你需要保留原列表,只需要排序后的结果时
对比示例:sort() vs sorted()
numbers = [5, 2, 9, 1]
# ❌ 错误:使用 sort() 后赋值(sort() 返回 None)
sorted_list = numbers.sort() # sorted_list 是 None!
print(sorted_list) # 输出:None
# ✅ 正确:使用 sorted() 函数
sorted_list = sorted(numbers)
print(sorted_list) # 输出:[1, 2, 5, 9]
12. 列表反转(reversing(反转))
⭐ Should(建议实践)|依赖:任意 Python 3 版本
列表反转就像把购物车中的商品顺序倒过来,Python 提供了三种方式:reverse() 方法、reversed() 函数和使用切片。
12.1 reverse() 方法
reverse() 方法对列表进行 原地反转,直接修改原列表。
基本语法:
列表.reverse()
示例:使用 reverse() 反转列表
numbers = [1, 2, 3, 4, 5]
# 反转列表
numbers.reverse()
print(f"反转后:{numbers}") # 输出:反转后:[5, 4, 3, 2, 1]
输出结果:
反转后:[5, 4, 3, 2, 1]
reverse() 的特点:
- 修改原列表:直接修改原列表,不返回新列表
- 返回 None:方法本身返回
None
12.2 reversed() 函数
reversed() 函数返回一个反向迭代器(reversed iterator(反向迭代器)),需要使用 list() 转换为列表。
基本语法:
反向迭代器 = reversed(列表)
新列表 = list(reversed(列表))
示例:使用 reversed() 反转列表
numbers = [1, 2, 3, 4, 5]
# 使用 reversed() 反转(不修改原列表)
reversed_iter = reversed(numbers)
reversed_list = list(reversed_iter)
print(f"原列表:{numbers}") # 输出:原列表:[1, 2, 3, 4, 5]
print(f"反转后:{reversed_list}") # 输出:反转后:[5, 4, 3, 2, 1]
输出结果:
原列表:[1, 2, 3, 4, 5]
反转后:[5, 4, 3, 2, 1]
12.3 使用切片反转
使用切片 [::-1] 可以快速反转列表,这是大厂程序员最常用的方法。
示例:使用切片反转列表
numbers = [1, 2, 3, 4, 5]
# 使用切片反转(不修改原列表)
reversed_list = numbers[::-1]
print(f"原列表:{numbers}") # 输出:原列表:[1, 2, 3, 4, 5]
print(f"反转后:{reversed_list}") # 输出:反转后:[5, 4, 3, 2, 1]
输出结果:
原列表:[1, 2, 3, 4, 5]
反转后:[5, 4, 3, 2, 1]
三种反转方法对比:
| 方法 | 修改原列表 | 代码简洁性 | 推荐度 |
|---|---|---|---|
reverse() | ✅ 是 | ⭐⭐⭐ | ⭐⭐ |
reversed() | ❌ 否 | ⭐⭐ | ⭐⭐ |
[::-1] 切片 | ❌ 否 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
推荐使用切片 [::-1]:
- 代码最简洁:一行代码完成反转
- 可读性强:
[::-1]表达意图清晰 - 不修改原列表:返回新列表,更安全
- 大厂程序员都在用:这是 Python 社区的通用做法
对比示例:三种反转方法
numbers = [1, 2, 3, 4, 5]
# 方法 1:使用 reverse()(修改原列表)
numbers_copy = numbers.copy()
numbers_copy.reverse()
print(numbers_copy) # 输出:[5, 4, 3, 2, 1]
# 方法 2:使用 reversed()(不修改原列表)
reversed_list = list(reversed(numbers))
print(reversed_list) # 输出:[5, 4, 3, 2, 1]
# 方法 3:使用切片(推荐!)
reversed_slice = numbers[::-1]
print(reversed_slice) # 输出:[5, 4, 3, 2, 1]
13. 列表 vs 不使用列表对比
对比示例:不使用列表 vs 使用列表
❌ 不使用列表的代码(繁琐且低效)
# 管理 5 个学生的成绩
score1 = 90
score2 = 85
score3 = 92
score4 = 88
score5 = 95
# 计算平均分(需要逐个相加)
total = score1 + score2 + score3 + score4 + score5
average = total / 5
print(f"平均分:{average}")
# 查找最高分(需要逐个比较)
max_score = score1
if score2 > max_score:
max_score = score2
if score3 > max_score:
max_score = score3
if score4 > max_score:
max_score = score4
if score5 > max_score:
max_score = score5
print(f"最高分:{max_score}")
# 如果要管理 100 个学生?需要定义 100 个变量,写 100 行比较代码!
✅ 使用列表的代码(简洁高效)
# 管理 5 个学生的成绩(使用列表)
scores = [90, 85, 92, 88, 95]
# 计算平均分(一行代码)
average = sum(scores) / len(scores)
print(f"平均分:{average}") # 输出:平均分:90.0
# 查找最高分(一行代码)
max_score = max(scores)
print(f"最高分:{max_score}") # 输出:最高分:95
# 管理 100 个学生?同样简洁!
scores_100 = [90, 85, 92, ...] # 100 个成绩
average_100 = sum(scores_100) / len(scores_100)
max_score_100 = max(scores_100)
对比结果:
- 代码量减少 90%:从几十行代码减少到几行
- 可扩展性强:无论有多少数据,代码结构都一样
- 可读性提升:代码意图清晰,易于理解
- 功能强大:支持排序、切片、查找等高级操作
14. 常见错误与对比修正
14.1 错误:索引越界
❌ 错误写法:
fruits = ['苹果', '香蕉', '橙子']
last = fruits[3] # IndexError: list index out of range(索引越界)
✅ 正确写法:
fruits = ['苹果', '香蕉', '橙子']
# 方法 1:使用负向索引(推荐)
last = fruits[-1] # 安全访问最后一个元素
# 方法 2:检查索引范围
if len(fruits) > 3:
last = fruits[3]
else:
last = fruits[-1] # 使用最后一个元素
14.2 错误:使用 sort() 后赋值
❌ 错误写法:
numbers = [5, 2, 9, 1]
sorted_list = numbers.sort() # sort() 返回 None!
print(sorted_list) # 输出:None(不是排序后的列表)
✅ 正确写法:
numbers = [5, 2, 9, 1]
# 方法 1:直接调用 sort()(修改原列表)
numbers.sort()
print(numbers) # 输出:[1, 2, 5, 9]
# 方法 2:使用 sorted() 函数(返回新列表)
sorted_list = sorted(numbers)
print(sorted_list) # 输出:[1, 2, 5, 9]
14.3 错误:append() vs extend() 混淆
❌ 错误写法:
fruits = ['苹果', '香蕉']
fruits.append(['橙子', '葡萄']) # 错误:会将整个列表作为一个元素
print(fruits) # 输出:['苹果', '香蕉', ['橙子', '葡萄']](嵌套列表)
✅ 正确写法:
fruits = ['苹果', '香蕉']
fruits.extend(['橙子', '葡萄']) # 正确:添加列表中的每个元素
print(fruits) # 输出:['苹果', '香蕉', '橙子', '葡萄'](扁平列表)
14.4 错误:修改列表的同时迭代
❌ 错误写法:
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 错误:在迭代时修改列表
print(numbers) # 可能产生意外结果
✅ 正确写法:
numbers = [1, 2, 3, 4, 5]
# 方法 1:先收集要删除的元素,再删除
to_remove = [num for num in numbers if num % 2 == 0]
for num in to_remove:
numbers.remove(num)
# 方法 2:使用列表推导式创建新列表(推荐)
numbers = [num for num in numbers if num % 2 != 0]
print(numbers) # 输出:[1, 3, 5]
14.5 错误:浅拷贝问题
❌ 错误写法:
list1 = [[1, 2], [3, 4]]
list2 = list1.copy() # 浅拷贝
list2[0].append(5)
print(list1) # 输出:[[1, 2, 5], [3, 4]](原列表也被修改了!)
✅ 正确写法:
import copy
list1 = [[1, 2], [3, 4]]
# 使用深拷贝(deep copy(深拷贝))
list2 = copy.deepcopy(list1)
list2[0].append(5)
print(list1) # 输出:[[1, 2], [3, 4]](原列表不变)
print(list2) # 输出:[[1, 2, 5], [3, 4]]
15. 选择建议与实践流程
15.1 操作方法选择指南
何时使用不同的操作方法:
| 操作类型 | 推荐方法 | 理由 |
|---|---|---|
| 添加单个元素 | append() | 最常用,简洁高效 |
| 在指定位置插入 | insert() | 需要指定位置时 |
| 添加多个元素 | extend() | 批量添加时 |
| 按值删除 | remove() | 知道元素值时 |
| 按索引删除并获取 | pop() | 需要被删除元素的值时 |
| 直接删除 | del | 不需要返回值时 |
| 判断元素是否存在 | in/not in | 最常用,简洁直观 |
| 查找元素索引 | index() | 需要知道位置时 |
| 统计元素次数 | count() | 需要统计时 |
| 排序并修改原列表 | sort() | 需要原地排序时 |
| 排序并保留原列表 | sorted() | 需要保留原列表时 |
| 反转列表 | [::-1] 切片 | 大厂程序员都在用,最简洁 |
15.2 学习路径建议
初学者(零基础):
- ✅ Must(必做实践):掌握列表创建、索引访问、基本增删改查
- ✅ Must(必做实践):掌握切片基本用法(
[:]、[start:end]) - ⭐ Should(建议实践):掌握排序和反转操作
进阶学习者(有基础):
- ✅ Must(必做实践):掌握切片高级用法(步长、反转)
- ⭐ Should(建议实践):掌握列表推导式创建列表
- 💡 Could(可选实践):理解浅拷贝和深拷贝的区别
15.3 实践项目建议
项目 1:学生成绩管理系统
# 创建一个学生成绩管理系统
# - 使用列表存储学生成绩
# - 实现添加、删除、修改成绩
# - 计算平均分、最高分、最低分
# - 排序和筛选成绩
项目 2:购物车程序
# 创建一个简单的购物车程序
# - 使用列表存储商品
# - 实现添加、删除、修改商品
# - 计算总价
# - 使用切片显示商品列表
项目 3:数据清洗工具
# 创建一个数据清洗工具
# - 使用列表存储数据
# - 使用切片提取、过滤数据
# - 使用排序和查找功能
15.4 最佳实践检查清单
在编写列表相关代码时,检查以下清单:
- 使用切片替代复杂的循环操作
- 使用
in/not in判断元素是否存在 - 使用
sorted()保留原列表,或使用sort()修改原列表 - 使用切片
[::-1]反转列表(而不是循环) - 使用
extend()添加多个元素(而不是循环 append) - 注意索引越界问题,使用负向索引访问最后一个元素
- 避免在迭代时修改列表
16. 📚 参考资料与学习资源
官方文档
- Python 官方文档 - 数据结构:docs.python.org/zh-cn/3/tut…
- Python 官方文档 - 列表方法:docs.python.org/zh-cn/3/lib…
在线教程
- Real Python - Python 列表指南:realpython.com/python-list…
- Python 列表操作详解:www.runoob.com/python3/pyt…
- 廖雪峰 Python 教程 - 列表:www.liaoxuefeng.com/wiki/101695…
推荐书籍
- 《Python 编程:从入门到实践》- Eric Matthes
- 《流畅的 Python》- Luciano Ramalho
工具推荐
- Python Tutor:可视化代码执行过程,帮助理解列表操作
- Jupyter Notebook:交互式编程环境,便于实验和测试
17. 总结
通过本文档的学习,你已经掌握了 Python 列表的核心技能:
核心要点回顾
-
列表创建:
- 使用方括号
[]直接创建 - 使用
list()构造函数转换 - 使用列表推导式快速生成
- 使用方括号
-
索引和切片:
- 正向索引从 0 开始
- 负向索引从 -1 开始(访问最后一个元素)
- 大厂程序员都在用切片
[::-1]反转列表
-
增删改查:
- 增加:
append()、insert()、extend() - 删除:
remove()、pop()、del、clear() - 修改:直接索引赋值
- 查找:
index()、count()、in/not in
- 增加:
-
排序和反转:
sort()修改原列表,sorted()返回新列表- 切片
[::-1]是最简洁的反转方式
学习建议
列表是 Python 编程的基础,建议你:
- 多实践:通过实际项目练习列表的各种操作
- 掌握切片:大厂程序员都在用切片,这是 Python 的特色功能
- 理解原理:理解列表的可变性、索引机制等核心概念
下一步学习
掌握了列表之后,建议继续学习:
- P2B:列表操作进阶 - 深入了解列表的高级操作
- P2C:元组 Tuple - 了解不可变序列,与列表对比理解
- P2D:字典 Dictionary - 学习键值对数据结构
记住:列表是 Python 最常用的数据结构,掌握好列表的使用,你的 Python 编程能力会大大提升。大厂程序员都在使用切片等高效方法,多练习、多实践,你也能写出专业、高效的代码!继续加油,你正在成为一名优秀的 Python 开发者!
厦门工学院人工智能创作坊 -- 郑恩赐
2025 年 11 月 03 日