一、列表(List)学习笔记

一、列表(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]) 会把 12 分别添加进去

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()delclear()
  • 查找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 实用技巧

  • 使用 + 或 解包合并列表
  • 使用 innot in 判断元素是否存在

起码得知道吧!

  1. 编写程序,实现列表的反转(不使用 reverse() 方法)
  1. 编写程序,找出列表中的最大值和最小值(不使用 max() 和 min() 函数)
  1. 编写程序,合并两个有序列表,保持有序
  1. 编写程序,删除列表中的所有重复元素,保持原有顺序
  1. 编写程序,使用列表实现一个简单的队列(FIFO)
  1. 编写程序,使用列表实现一个简单的栈(LIFO)
推荐云服务

雨云 - 云服务器首选

稳定 · 高速 · 性价比超高

使用优惠码立享折扣,开启你的云端之旅~

一元试用秒级开通24h在线客服

优惠码

zqf
立即访问
Loading...
灵心小窝

灵心小窝

这里不是一个喧闹的地方,只是用来存放一些还不想遗忘的东西。

声明 © 2026 早清风
加载中...