一、列表(List)学习笔记
2026-02-19
Python基础
type
Post
status
Published
date
Feb 19, 2026
slug
python-data-structures-list-notes-1
summary
变量就是一个盒子,用来装一个东西。但当我需要处理一组数据(比如一个班的学生、一周的温度)时,才发现单个变量根本不够用!这时候列表就派上用场了——它就像是一个可以装很多东西的收纳盒。
tags
Python数据存储容器
category
Python基础
icon
password
💡 学习感悟:变量就是一个盒子,用来装一个东西。但当我需要处理一组数据(比如一个班的学生、一周的温度)时,才发现单个变量根本不够用!这时候列表就派上用场了——它就像是一个可以装很多东西的收纳盒。
1. 为什么需要列表?
我的理解
在没有列表之前,如果要存储多个学生姓名,我只能这样写:
这样写不仅代码冗长,而且如果要遍历所有学生,简直是一场噩梦!
列表的出现解决了这个问题——它让我们可以用一个变量存储多个数据,而且这些数据是有序的、可以修改的。
2. 列表的基本概念
2.1 列表的特点
特点 | 说明 | 示例 |
有序 | 元素按插入顺序排列,有固定索引 | [1, 2, 3] 和 [3, 2, 1] 是不同的列表 |
可变 | 可以添加、删除、修改元素 | 可以随时修改列表内容 |
可重复 | 允许存储重复的元素 | [1, 1, 2, 2] 是合法的 |
异构 | 可以存储不同类型的数据 | [1, "hello", True, 3.14] |
2.2 列表的内存结构
列表内存结构示意图:
📝 我的理解:列表变量存储的其实只是一个"引用"(可以理解为地址),真正的数据存在内存的另一处。这让我明白了为什么list2 = list1只是创建了一个引用,而不是复制数据。
3. 列表的创建
3.1 使用方括号创建
3.2 使用 list() 函数创建
3.3 创建特殊列表
4. 列表的基本操作
4.1 索引访问
列表索引示意图:
⚠️ 踩坑记录:刚开始我总是忘记索引从0开始,经常写fruits[1]想取第一个元素,结果取到了第二个!还有就是反向索引-1表示最后一个元素,这个真的很方便。
4.2 切片操作
切片操作示意图:
📝 我的理解:切片是左闭右开的,即包含 start 索引的元素,但不包含 end 索引的元素。这个设计让我一开始很困惑,但后来发现这样设计可以让list[:n]和list[n:]正好把列表分成两部分,不会有重叠或遗漏。
4.3 修改元素
5. 列表的常用方法
5.1 添加元素
⚠️ 踩坑记录:append()和extend()的区别让我困惑了很久。
append([1, 2])会把整个列表[1, 2]作为一个元素添加进去
extend([1, 2])会把1和2分别添加进去
5.2 删除元素
5.3 查找和统计
5.4 排序和反转
📝 我的理解:sort()和sorted()的区别很重要!
sort()是原地排序,会修改原列表,返回None
sorted()返回新列表,原列表不变
6. 列表的遍历
列表遍历方式对比图:
6.1 使用 for 循环遍历
6.2 同时遍历多个列表
7. 列表推导式
7.1 基本语法
7.2 嵌套列表推导式
7.3 列表推导式实战案例
8. 实用技巧
8.1 快速合并两个列表
8.2 判断元素是否存在
9. 实际应用案例
列表应用场景综合图:
9.1 成绩统计系统
9.2 成绩筛选与统计
10. 列表的复制和深浅拷贝
深浅拷贝对比图:
10.1 赋值与复制
⚠️ 踩坑记录:这个坑我踩过!当时用copy()复制了一个二维列表,修改副本时原列表也变了,调试了好久才发现是浅拷贝的问题。对于嵌套列表,一定要用深拷贝!
10.2 深拷贝
11. 遇到的问题和解决
11.1 索引越界
11.2 修改列表时的遍历问题
⚠️ 踩坑记录:曾经我在遍历列表时删除元素,结果发现有些元素没有被处理到!这是因为删除元素后,后面的元素会前移,导致索引错位。解决方法是用切片[:]创建副本遍历,或者倒序遍历。
11.3 可变对象的共享引用问题
12. 核心知识点整理
12.1 列表特点
- 有序:元素按插入顺序排列,有固定索引
- 可变:可以添加、删除、修改元素
- 可重复:允许存储重复的元素
- 异构:可以存储不同类型的数据
12.2 基本操作
- 索引访问:
list[0]、list[-1]
- 切片操作:
list[start:end:step]
- 修改元素:
list[0] = value
12.3 常用方法
- 添加:
append()、extend()、insert()
- 删除:
remove()、pop()、del、clear()
- 查找:
index()、count()、in
- 排序:
sort()、sorted()、reverse()
12.4 遍历方式
for item in list
for i in range(len(list))
for i, item in enumerate(list)
for a, b in zip(list1, list2)
12.5 列表推导式
[x for x in iterable]
[x for x in iterable if condition]
12.6 拷贝注意
- 赋值
=:只是创建引用
copy():是浅拷贝
copy.deepcopy():是深拷贝
12.7 常见错误
- 索引越界
- 遍历时修改列表
- 使用可变对象作为默认参数
12.8 实用技巧
- 使用
+或 解包合并列表
- 使用
in和not in判断元素是否存在
起码得知道吧!
- 编写程序,实现列表的反转(不使用 reverse() 方法)
- 编写程序,找出列表中的最大值和最小值(不使用 max() 和 min() 函数)
- 编写程序,合并两个有序列表,保持有序
- 编写程序,删除列表中的所有重复元素,保持原有顺序
- 编写程序,使用列表实现一个简单的队列(FIFO)
- 编写程序,使用列表实现一个简单的栈(LIFO)
Loading...
