查看全课大纲(第 13 / 51 节)
  1. 1.Python 是什么?为什么值得学?
  2. 2.如何为 Python 编程准备一个“全家桶”环境?
  3. 3.Python 有哪几种执行方法?
  4. 4.行与缩进到底有什么用?
  5. 5.注释有什么用,怎么写?
  6. 6.变量:如何给数据起个好名字?
  7. 7.运算符的优先级和常见坑点是什么?
  8. 8.Python 中,数字和布尔值究竟有哪几种?
  9. 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
  10. 10.如何将程序的结果展示给用户或保存下来?
  11. 11.CSV 文件怎么读怎么写才方便?
  12. 12.列表是什么,如何创建和访问它?
  13. 13.列表的修改操作,有哪些方法?
  14. 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
  15. 15.判断语句:如何让程序根据条件做不同的事?
  16. 16.for 循环如何遍历序列中的元素?
  17. 17.while 循环什么时候才会停?
  18. 18.while 循环的结束条件,你写对了吗?
  19. 19.循环中途想提前结束,怎么办?
  20. 20.`break` 和 `continue` 到底有什么区别?
  21. 21.列表推导式如何让代码更简洁高效?
  22. 22.字符串怎么定义、拼接和操作?
  23. 23.元组:为什么定义单个元素时要加逗号?
  24. 24.集合(set)怎么用?如何快速去重和做集合运算?
  25. 25.字典是什么,为什么比列表更方便?
  26. 26.字典的增删改查与遍历,如何避免 KeyError?
  27. 27.函数里的变量,为什么有的能用有的不能用?
  28. 28.在函数内部修改全局变量,为什么有时不生效?
  29. 29.函数里能修改全局变量吗?返回值怎么用?
  30. 30.匿名函数:如何用 lambda 快速定义简单函数?
  31. 31.面向对象编程是什么,为什么需要它?
  32. 32.类中的方法和属性到底怎么定义和使用?
  33. 33.如何控制对对象内部属性和方法的访问?
  34. 34.异常发生时,程序会怎样继续执行?
  35. 35.如何组织代码:包和模块
  36. 36.`if __name__ == '__main__'` 到底有什么用?
  37. 37.如何用 IDE 的 Debug 功能排查程序错误?
  38. 38.Matplotlib 绘图的第一步该做什么?
  39. 39.Figure 是什么,如何设置图形尺寸?
  40. 40.如何自定义 Matplotlib 的坐标轴?
  41. 41.如何为图表添加图例,让不同曲线一目了然?
  42. 42.饼图怎么画才能直观展示数据占比?
  43. 43.如何用 Matplotlib 绘制散点图?
  44. 44.柱状图怎么画?
  45. 45.如何使用 Matplotlib 绘制等高线图?
  46. 46.如何在 Matplotlib 中绘制子图?
  47. 47.zip 函数如何把多个列表“打包”在一起?
  48. 48.如何给可迭代对象加上索引?
  49. 49.random 模块如何生成随机数?
  50. 50.math 模块怎么用?
  51. 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() 方法有两种用法:

  1. 不传参数:删除并返回列表的最后一个元素。
  2. 传入索引:删除并返回指定索引位置的元素。
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 = ["写邮件", "开会", "写报告", "订机票"]。

  1. 会议取消了,请从列表中删除“开会”。
  2. 老板临时加了一项“做预算”,需要插在“写报告”之前。
  3. 你又想起了另外几项常规任务 routine = ["检查邮件", "整理桌面"],请把它们添加到 todo_list 的末尾。
  4. 最后,你完成了第一项任务,请将它从列表中移除并打印出来。
👉 点击查看参考答案

思路:分别使用 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 listremove() 要求值必须存在于列表中。删除前最好先判断。if '某值' in my_list:
my_list.remove('某值')
混淆 list_a + list_b 与 list_a.extend(list_b) 的结果使用 + 后原列表未变,误以为已被修改。+ 产生新列表,不修改原列表。extend() 直接修改原列表。根据是否需要保留原列表选择操作。

小结

  1. 添加元素:append(item) 在末尾添加单个元素;insert(index, item) 在指定索引前插入元素。
  2. 拼接与扩展:list_a + list_b 生成新列表,原列表不变;list_a.extend(list_b) 将 list_b 的所有元素逐个添加到 list_a 末尾。
  3. 关键区别:append() 添加整个对象,extend() 添加另一个列表中的每个元素。
  4. 删除元素:
    • del list[index]:按索引删除。
    • list.remove(value):按值删除第一个匹配项。
    • list.pop() 或 list.pop(index):删除并返回元素(默认末尾)。
  5. 所有修改操作(append, insert, extend, del, remove, pop)都直接修改原列表,而 + 操作不修改原列表。

📋 行动清单

  • 在Python环境中,创建一个列表,分别用 append() 和 extend() 添加同一个列表 ['x', 'y'],观察结果差异。
  • 尝试对一个空列表使用 pop() 或对一个不包含某值的列表使用 remove(),看看会报什么错。
  • 将本节“动手练一练”的代码自己敲一遍,并尝试改变操作的顺序,观察列表的最终状态。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第1章代码包:列表-修改(含1 个 Notebook)
    ZIP · 940B
    下载