查看全课大纲(第 13 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
列表的修改操作,有哪些方法?
约 13 分钟
小象实战讲义 · Python 编程从入门到实践
在上一节我们学习了如何创建和访问列表。列表的强大之处在于它是可变的,这意味着创建后,我们还可以随时增删其中的元素。本节我们将系统地学习修改列表的四种核心操作:添加元素、拼接列表、扩展列表和删除元素。掌握这些方法,你就能灵活地动态管理列表数据。
💡 核心导读
- 添加单个元素:使用
append()在末尾添加,或insert()在指定位置插入。 - 拼接列表:使用
+运算符将两个列表组合成一个新列表,原列表不变。 - 扩展列表:使用
extend()方法将另一个列表的所有元素逐个添加到当前列表末尾。 - 删除元素:掌握
del语句、remove()和pop()三种删除方式及其适用场景。
向列表添加元素
append():在末尾添加
append() 方法用于在列表的末尾添加一个元素。无论这个元素是什么类型(数字、字符串,甚至是另一个列表),它都会被作为一个整体添加到原列表的尾部。
# 定义一个包含个人信息的列表,每个元素也是一个列表
info_lists = [
["zhangsan", 20, 180.5, 80, True],
["lisi", 18, 175, 70, True],
["wangwu", 25, 185, 90, False]
]
# append:把新元素作为整体添加到末尾
new_info = ["xiaobai", 30, 170, 65, False]
info_lists.append(new_info)
print("append 后:", info_lists)
# insert:在索引为 1 的位置(即第二个元素前)插入
info_lists.insert(1, ["孙悟空", 18, 160, 50, True])
print("insert 后:", info_lists)append 后: [['zhangsan', 20, 180.5, 80, True], ['lisi', 18, 175, 70, True], ['wangwu', 25, 185, 90, False], ['xiaobai', 30, 170, 65, False]]
insert 后: [['zhangsan', 20, 180.5, 80, True], ['孙悟空', 18, 160, 50, True], ['lisi', 18, 175, 70, True], ['wangwu', 25, 185, 90, False], ['xiaobai', 30, 170, 65, False]]注意:列表索引从0开始,所以 insert(1, ...) 表示在第二个位置插入,插入位置及之后的元素会自动向后移动。
列表的拼接与扩展
使用 + 拼接列表
使用 + 运算符可以将两个列表拼接起来,生成一个全新的列表,而参与运算的两个原列表内容保持不变。
使用 extend() 扩展列表
extend() 方法用于将一个列表中的所有元素,逐个添加到另一个列表的末尾。调用该方法的列表会被修改,而作为参数传入的列表保持不变。
name_list1 = ["唐僧", "悟空", "八戒"]
name_list2 = ["沙僧", "白龙马"]
# 使用 + 拼接,结果赋值给新变量,原列表不变
name_list3 = name_list1 + name_list2
print("原列表1:", name_list1)
print("原列表2:", name_list2)
print("拼接后的新列表:", name_list3)
# 使用 extend 扩展 name_list1(直接修改原列表)
name_list1.extend(name_list2)
print("被扩展的列表1:", name_list1)
print("作为参数的列表2:", name_list2)
# append 与 extend 的区别:append 把整个列表当成一个元素
list_a = [1, 2, 3]
list_b = [4, 5]
list_a.append(list_b)
print("append 后的 list_a:", list_a)
list_a = [1, 2, 3]
list_a.extend(list_b)
print("extend 后的 list_a:", list_a)原列表1: ['唐僧', '悟空', '八戒']
原列表2: ['沙僧', '白龙马']
拼接后的新列表: ['唐僧', '悟空', '八戒', '沙僧', '白龙马']
被扩展的列表1: ['唐僧', '悟空', '八戒', '沙僧', '白龙马']
作为参数的列表2: ['沙僧', '白龙马']
append 后的 list_a: [1, 2, 3, [4, 5]]
extend 后的 list_a: [1, 2, 3, 4, 5]关键区别:append() vs extend()
这是初学者最容易混淆的地方。两者的核心区别在于对待参数的方式:
append():将传入的整个对象作为一个元素添加到列表末尾。extend():将传入的另一个列表中的每个元素,逐个添加到列表末尾。
从列表中删除元素
del 语句:按索引删除
del 是 Python 的一个语句(不是方法),用于删除指定索引位置的元素。删除后,后面的元素会向前移动填补空位。
remove():按值删除
remove() 方法用于删除列表中第一个与指定值匹配的元素。如果列表中有多个相同的值,只会删除最先出现的那个。如果值不存在,会引发 ValueError 错误。
pop():删除并返回元素
pop() 方法有两种用法:
- 不传参数:删除并返回列表的最后一个元素。
- 传入索引:删除并返回指定索引位置的元素。
group = ["唐僧", "悟空", "八戒", "沙僧", "白龙马"]
print("删除前:", group)
# del:按索引删除(索引为1的元素,即"悟空")
del group[1]
print("del 后:", group)
# remove:按值删除第一个匹配项(列表中有两个"沙僧")
group = ["唐僧", "悟空", "八戒", "沙僧", "白龙马", "沙僧"]
group.remove("沙僧")
print("remove 后:", group)
# pop:删除并返回元素
group = ["唐僧", "悟空", "八戒", "沙僧", "白龙马"]
last_one = group.pop()
print("被删除的元素是: {}".format(last_one))
second_one = group.pop(1)
print("被删除的元素是: {}".format(second_one))
print("pop 后列表:", group)删除前: ['唐僧', '悟空', '八戒', '沙僧', '白龙马']
del 后: ['唐僧', '八戒', '沙僧', '白龙马']
remove 后: ['唐僧', '悟空', '八戒', '白龙马', '沙僧']
被删除的元素是: 白龙马
被删除的元素是: 悟空
pop 后列表: ['唐僧', '八戒', '沙僧']📝 动手练一练
你有一个任务清单 todo_list = ["写邮件", "开会", "写报告", "订机票"]。
- 会议取消了,请从列表中删除“开会”。
- 老板临时加了一项“做预算”,需要插在“写报告”之前。
- 你又想起了另外几项常规任务
routine = ["检查邮件", "整理桌面"],请把它们添加到todo_list的末尾。 - 最后,你完成了第一项任务,请将它从列表中移除并打印出来。
👉 点击查看参考答案
思路:分别使用 remove()、insert()、extend() 和 pop(0) 方法。
# 初始任务清单
todo_list = ["写邮件", "开会", "写报告", "订机票"]
print("初始清单:", todo_list)
# 1. 删除"开会"
todo_list.remove("开会")
print("删除会议后:", todo_list)
# 2. 在"写报告"前插入"做预算"
# "写报告"的索引现在是1
todo_list.insert(1, "做预算")
print("插入预算后:", todo_list)
# 3. 添加常规任务
routine = ["检查邮件", "整理桌面"]
todo_list.extend(routine)
print("扩展常规任务后:", todo_list)
# 4. 完成第一项任务并移除
completed = todo_list.pop(0)
print("已完成的任务: {}".format(completed))
print("最终清单:", todo_list)初始清单: ['写邮件', '开会', '写报告', '订机票']
删除会议后: ['写邮件', '写报告', '订机票']
插入预算后: ['写邮件', '做预算', '写报告', '订机票']
扩展常规任务后: ['写邮件', '做预算', '写报告', '订机票', '检查邮件', '整理桌面']
已完成的任务: 写邮件
最终清单: ['做预算', '写报告', '订机票', '检查邮件', '整理桌面']常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
my_list.append([4, 5])期望得到 [1,2,3,4,5] | 实际得到 [1, 2, 3, [4, 5]] | append() 将整个参数作为一个元素添加。想添加多个元素应使用 extend()。 | my_list.extend([4, 5]) |
del my_list[5]但列表只有3个元素 | IndexError: list assignment index out of range | 索引 5 超出了列表的有效索引范围(0到2)。删除前需确认索引是否存在。 | 先检查长度:if len(my_list) > 5:del my_list[5] |
my_list.remove('某值')但列表中没有这个值 | ValueError: list.remove(x): x not in list | remove() 要求值必须存在于列表中。删除前最好先判断。 | if '某值' in my_list:my_list.remove('某值') |
混淆 list_a + list_b 与 list_a.extend(list_b) 的结果 | 使用 + 后原列表未变,误以为已被修改。 | + 产生新列表,不修改原列表。extend() 直接修改原列表。 | 根据是否需要保留原列表选择操作。 |
小结
- 添加元素:
append(item)在末尾添加单个元素;insert(index, item)在指定索引前插入元素。 - 拼接与扩展:
list_a + list_b生成新列表,原列表不变;list_a.extend(list_b)将list_b的所有元素逐个添加到list_a末尾。 - 关键区别:
append()添加整个对象,extend()添加另一个列表中的每个元素。 - 删除元素:
del list[index]:按索引删除。list.remove(value):按值删除第一个匹配项。list.pop()或list.pop(index):删除并返回元素(默认末尾)。
- 所有修改操作(
append,insert,extend,del,remove,pop)都直接修改原列表,而+操作不修改原列表。
📋 行动清单
- 在Python环境中,创建一个列表,分别用
append()和extend()添加同一个列表['x', 'y'],观察结果差异。 - 尝试对一个空列表使用
pop()或对一个不包含某值的列表使用remove(),看看会报什么错。 - 将本节“动手练一练”的代码自己敲一遍,并尝试改变操作的顺序,观察列表的最终状态。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第1章代码包:列表-修改(含1 个 Notebook)ZIP · 940B