P2A-Python列表-什么是列表?切片为什么这么强大?怎么快速掌握增删改查?

52 阅读40分钟

P2A-Python列表-什么是列表?切片为什么这么强大?怎么快速掌握增删改查?

📝 摘要

面向零基础,系统讲解 Python 列表(List)核心技能:创建、索引、切片、增删改查、排序、反转。通过生活化比喻与实战对比,掌握强大的切片技巧和高效的数据操作方法,快速提升编程能力。


目录


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(可变的)),可以随时添加、删除、修改元素。

列表的特点

列表就像生活中的 购物清单书架,具有以下特点:

  1. 有序(ordered(有序)):列表中的元素按照添加顺序排列,每个元素都有固定的位置
  2. 可变(mutable(可变的)):可以随时添加、删除、修改列表中的元素
  3. 可重复(allows duplicates(允许重复)):同一个元素可以在列表中出现多次
  4. 索引访问(indexed(可索引)):可以通过索引快速访问列表中的任意元素

列表的作用

列表就像程序中的 多功能工具箱,让你能够:

  1. 存储多个数据:一次性管理大量相关的数据
  2. 快速访问元素:通过索引快速获取特定位置的元素
  3. 灵活操作数据:可以随时添加、删除、修改数据
  4. 高效处理数据:支持排序、反转、查找等高级操作

列表的重要性

想象一下,如果没有列表,处理多个数据会是什么样子:

# 没有列表的世界(繁琐且低效)
student1 = "张三"
student2 = "李四"
student3 = "王五"
# 要处理 100 个学生,需要定义 100 个变量!

# 打印所有学生(需要逐个打印)
print(student1)
print(student2)
print(student3)
# ... 要写 100 行代码!

有了列表,代码变得简洁高效:

# 使用列表(简洁高效)
students = ["张三", "李四", "王五", ...]  # 一个变量存储所有学生

# 打印所有学生(一行代码)
for student in students:
    print(student)
# 无论有多少学生,代码都一样简洁!

列表让数据管理变得简单高效,是 Python 编程中最重要的数据结构之一。

Python 列表的优势

Python 的列表相比其他编程语言的数组或列表,具有以下优势:

  1. 动态大小:列表长度可以动态增长或缩减,不需要预先指定大小
  2. 类型灵活:列表中可以存放不同类型的元素,不需要统一类型
  3. 丰富的操作:提供了大量内置方法,如 append()sort()reverse()
  4. 切片支持大厂程序员都在使用的切片功能,可以快速获取子列表

💡 核心概念:列表是 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起始索引(包含)0numbers[2:] 从索引 2 开始
stop结束索引(不包含列表长度numbers[:5] 到索引 5(不含)
step步长(每次跳过的元素数)1numbers[::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]  # 一行代码!

切片的优势

  • 代码简洁:一行代码完成复杂操作
  • 性能高效:切片操作是内置的,执行速度快
  • 可读性强:意图清晰,易于理解
  • 不修改原列表:切片返回新列表,原列表不变

大厂程序员为什么都用切片

  1. 效率高:切片是 Python 内置操作,比循环快得多
  2. 代码简洁:一行代码替代多行循环
  3. 可读性强numbers[::-1] 比循环反转更直观
  4. 功能强大:可以实现复制、反转、分段等多种操作

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()delclear(),每种方法都有其适用场景。

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 运算符

innot in 运算符用于检查元素是否在列表中,返回布尔值(TrueFalse)。

基本语法

元素 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 学习路径建议

初学者(零基础)

  1. Must(必做实践):掌握列表创建、索引访问、基本增删改查
  2. Must(必做实践):掌握切片基本用法([:][start:end]
  3. Should(建议实践):掌握排序和反转操作

进阶学习者(有基础)

  1. Must(必做实践):掌握切片高级用法(步长、反转)
  2. Should(建议实践):掌握列表推导式创建列表
  3. 💡 Could(可选实践):理解浅拷贝和深拷贝的区别

15.3 实践项目建议

项目 1:学生成绩管理系统

# 创建一个学生成绩管理系统
# - 使用列表存储学生成绩
# - 实现添加、删除、修改成绩
# - 计算平均分、最高分、最低分
# - 排序和筛选成绩

项目 2:购物车程序

# 创建一个简单的购物车程序
# - 使用列表存储商品
# - 实现添加、删除、修改商品
# - 计算总价
# - 使用切片显示商品列表

项目 3:数据清洗工具

# 创建一个数据清洗工具
# - 使用列表存储数据
# - 使用切片提取、过滤数据
# - 使用排序和查找功能

15.4 最佳实践检查清单

在编写列表相关代码时,检查以下清单:

  • 使用切片替代复杂的循环操作
  • 使用 in/not in 判断元素是否存在
  • 使用 sorted() 保留原列表,或使用 sort() 修改原列表
  • 使用切片 [::-1] 反转列表(而不是循环)
  • 使用 extend() 添加多个元素(而不是循环 append)
  • 注意索引越界问题,使用负向索引访问最后一个元素
  • 避免在迭代时修改列表

16. 📚 参考资料与学习资源

官方文档

在线教程

推荐书籍

  • 《Python 编程:从入门到实践》- Eric Matthes
  • 《流畅的 Python》- Luciano Ramalho

工具推荐

  • Python Tutor:可视化代码执行过程,帮助理解列表操作
  • Jupyter Notebook:交互式编程环境,便于实验和测试

17. 总结

通过本文档的学习,你已经掌握了 Python 列表的核心技能:

核心要点回顾

  1. 列表创建

    • 使用方括号 [] 直接创建
    • 使用 list() 构造函数转换
    • 使用列表推导式快速生成
  2. 索引和切片

    • 正向索引从 0 开始
    • 负向索引从 -1 开始(访问最后一个元素)
    • 大厂程序员都在用切片 [::-1] 反转列表
  3. 增删改查

    • 增加:append()insert()extend()
    • 删除:remove()pop()delclear()
    • 修改:直接索引赋值
    • 查找:index()count()in/not in
  4. 排序和反转

    • sort() 修改原列表,sorted() 返回新列表
    • 切片 [::-1] 是最简洁的反转方式

学习建议

列表是 Python 编程的基础,建议你:

  1. 多实践:通过实际项目练习列表的各种操作
  2. 掌握切片大厂程序员都在用切片,这是 Python 的特色功能
  3. 理解原理:理解列表的可变性、索引机制等核心概念

下一步学习

掌握了列表之后,建议继续学习:

  • P2B:列表操作进阶 - 深入了解列表的高级操作
  • P2C:元组 Tuple - 了解不可变序列,与列表对比理解
  • P2D:字典 Dictionary - 学习键值对数据结构

记住:列表是 Python 最常用的数据结构,掌握好列表的使用,你的 Python 编程能力会大大提升。大厂程序员都在使用切片等高效方法,多练习、多实践,你也能写出专业、高效的代码!继续加油,你正在成为一名优秀的 Python 开发者!


厦门工学院人工智能创作坊 -- 郑恩赐
2025 年 11 月 03 日