图解python | 列表
一、列表的核心特性(图解)
| 特性 | 可视化说明 | 代码示例 |
|---|---|---|
| 有序性 | 元素按插入顺序排列,每个元素有唯一「索引」(从 0 开始) (示意:索引 0→1,索引 1→2,索引 2→3) |
lst = [1,2,3]<br>print(lst[0]) # 1 |
| 可变性 | 可直接修改、新增、删除元素(内存地址不变,仅内容变化) (修改索引 1 的值:2→9) |
lst[1] = 9<br>print(lst) # [1,9,3] |
| 元素类型不限 | 可包含任意数据类型(数字、字符串、列表、字典等) (索引 0:int,索引 1:str,索引 2:list) |
lst = [1, "a", [2,3]] |
| 可重复 | 允许元素重复,索引仍唯一 (索引 0 和 2 都是 1) |
lst = [1,2,1]<br>print(lst) # [1,2,1] |
二、列表的结构(内存视角图解)
列表在内存中是「连续的内存块 + 元素引用」的结构:
-
列表对象本身存储:元素引用的指针数组 + 长度 + 容量;
-
每个元素的指针指向实际数据的内存地址。
可视化示意图(以 lst = [1, "Python", [True]] 为例):
plaintext
展开
代码语言:TXT
自动换行
AI代码解释
列表对象(lst)
┌───────────┬───────────┬───────────┬───────────┐
│ 容量(8) │ 长度(3) │ 指针0 │ 指针1 │ 指针2 │
└───────────┴───────────┴───────────┴───────────┴───────────┘
↓ ↓ ↓
▼ ▼ ▼
实际数据内存 [1] ["Python"] [True]
内存地址 0x100 0x200 0x300
-
「容量」:列表预分配的内存空间(可存储的最大元素数,满了会自动扩容);
-
「长度」:当前实际元素个数(
len(lst)获取); -
「指针」:指向每个元素的实际内存地址(因此列表可存不同类型元素)。
三、列表核心操作(图解 + 代码)
1. 索引与切片(最常用操作)
#####(1)索引(访问单个元素)
索引分为「正索引」(从 0 开始)和「负索引」(从 -1 开始,倒数第一个):
plaintext
代码语言:TXT
自动换行
AI代码解释
列表: [10, 20, 30, 40, 50]
正索引: 0 1 2 3 4
负索引:-5 -4 -3 -2 -1
代码示例:
python
运行
代码语言:TXT
自动换行
AI代码解释
lst = [10, 20, 30, 40, 50]
print(lst[2]) # 正索引:30(取第3个元素)
print(lst[-2]) # 负索引:40(取倒数第2个元素)
#####(2)切片(访问连续元素)
语法:lst[起始索引:结束索引:步长](左闭右开,步长默认 1)
plaintext
代码语言:TXT
自动换行
AI代码解释
列表: [10, 20, 30, 40, 50]
切片1:lst[1:4] → 取索引1到3 → [20,30,40]
切片2:lst[:3] → 从开头到索引2 → [10,20,30]
切片3:lst[2:] → 从索引2到结尾 → [30,40,50]
切片4:lst[::2] → 步长2 → [10,30,50]
切片5:lst[::-1]→ 步长-1(反转)→ [50,40,30,20,10]
代码示例:
python
运行
代码语言:TXT
自动换行
AI代码解释
lst = [10, 20, 30, 40, 50]
print(lst[1:4]) # [20, 30, 40]
print(lst[::2]) # [10, 30, 50]
print(lst[::-1]) # [50, 40, 30, 20, 10]
2. 新增元素(3 种方式)
| 操作 | 图解说明 | 代码示例 |
|---|---|---|
append() |
尾部新增元素(直接扩容,效率最高)lst = [1,2]<br>lst.append(3)<br>print(lst) # [1,2,3] |
|
insert() |
指定索引插入(后续元素后移,效率低) (索引 1 插入 9,原 1/2 后移) |
lst.insert(1,9)<br>print(lst) # [1,9,2,3] |
extend() |
尾部批量新增(合并另一个可迭代对象) | lst.extend([4,5])<br>print(lst) # [1,9,2,3,4,5] |
3. 删除元素(4 种方式)
| 操作 | 图解说明 | 代码示例 |
|---|---|---|
remove() |
删除指定值的第一个元素(后续元素前移) (删除值为 9 的元素) |
lst.remove(9)<br>print(lst) # [1,2,3,4,5] |
pop() |
删除指定索引元素(默认最后一个),并返回该值 (删除索引 2 的 3) |
val = lst.pop(2)<br>print(val) # 3<br>print(lst) # [1,2,4,5] |
del |
删除指定索引 / 切片的元素(直接释放内存) (删除索引 1 的 2) |
del lst[1]<br>print(lst) # [1,4,5] |
clear() |
清空所有元素(列表对象保留,内容为空) | lst.clear()<br>print(lst) # [] |
4. 列表遍历(2 种方式)
#####(1)遍历元素(直接遍历)
plaintext
代码语言:TXT
自动换行
AI代码解释
列表:[10,20,30]
遍历过程:取10 → 取20 → 取30
代码:
python
运行
代码语言:TXT
自动换行
AI代码解释
lst = [10,20,30]
for num in lst:
print(num) # 依次输出10、20、30
#####(2)遍历索引 + 元素(enumerate())
plaintext
代码语言:TXT
自动换行
AI代码解释
列表:[10,20,30]
遍历过程:(0,10) → (1,20) → (2,30)
代码:
python
运行
代码语言:TXT
自动换行
AI代码解释
lst = [10,20,30]
for idx, num in enumerate(lst):
print(f"索引{idx}:{num}") # 索引0:10、索引1:20、索引2:30
四、列表高级操作(图解 + 代码)
1. 列表推导式(快速生成列表)
语法:[表达式 for 变量 in 可迭代对象 if 条件]
#####图解(生成 1-5 的平方列表):
plaintext
代码语言:TXT
自动换行
AI代码解释
可迭代对象:range(1,6) → 1、2、3、4、5
表达式:i*i → 1、4、9、16、25
结果列表:[1,4,9,16,25]
代码:
python
运行
代码语言:TXT
自动换行
AI代码解释
square_lst = [i*i for i in range(1,6)]
print(square_lst) # [1, 4, 9, 16, 25]
# 带条件的推导式(筛选偶数)
even_lst = [i for i in range(1,10) if i%2 == 0]
print(even_lst) # [2,4,6,8]
2. 嵌套列表(二维列表)
#####图解(模拟矩阵):
plaintext
代码语言:TXT
自动换行
AI代码解释
嵌套列表:[[1,2,3], [4,5,6], [7,8,9]]
结构:
索引0 → [1,2,3](行0):索引0=1,索引1=2,索引2=3
索引1 → [4,5,6](行1):索引0=4,索引1=5,索引2=6
索引2 → [7,8,9](行2):索引0=7,索引1=8,索引2=9
代码:
python
运行
展开
代码语言:TXT
自动换行
AI代码解释
matrix = [[1,2,3], [4,5,6], [7,8,9]]
# 取第二行第三个元素(索引1,2)
print(matrix[1][2]) # 6
# 遍历嵌套列表
for row in matrix:
for num in row:
print(num, end=" ") # 1 2 3 4 5 6 7 8 9
3. 列表排序(sort() vs sorted())
| 操作 | 图解说明 | 代码示例 |
|---|---|---|
lst.sort() |
原地排序(修改原列表,无返回值) ([3,1,2]→[1,2,3]) |
lst = [3,1,2]<br>lst.sort()<br>print(lst) # [1,2,3] |
sorted(lst) |
新列表排序(原列表不变,返回新列表)lst = [3,1,2]<br>new_lst = sorted(lst)<br>print(lst) # [3,1,2]<br>print(new_lst) # [1,2,3] |
五、列表常见坑(图解提醒)
-
浅拷贝问题:嵌套列表的
copy()仅拷贝外层,内层共享内存:
plaintext代码语言:TXT
自动换行AI代码解释
原列表:lst = [1, [2,3]] 浅拷贝:lst_copy = lst.copy() 修改内层:lst_copy[1][0] = 9 结果:lst → [1, [9,3]](原列表内层也变了)
解决:用copy.deepcopy()深拷贝:
python
运行代码语言:TXT
自动换行AI代码解释
import copy lst = [1, [2,3]] lst_deep = copy.deepcopy(lst) lst_deep[1][0] = 9 print(lst) # [1, [2,3]](原列表不变) print(lst_deep) # [1, [9,3]] -
索引越界:访问超出列表长度的索引会报错:
plaintext代码语言:TXT
自动换行AI代码解释
列表:[1,2,3](最大索引2) 错误操作:lst[3] → IndexError
解决:先判断索引范围,或用lst.get()(但列表无get(),可结合len()):
python
运行代码语言:TXT
自动换行AI代码解释
lst = [1,2,3] idx = 3 if idx < len(lst): print(lst[idx]) else: print("索引越界") # 输出:索引越界
六、列表核心总结(图解版)
plaintext
展开
代码语言:TXT
自动换行
AI代码解释
列表核心
┌─────────────┬─────────────────────────┐
│ 核心特性 │ 有序、可变、元素类型不限 │
├─────────────┼─────────────────────────┤
│ 核心操作 │ 索引/切片、增/删/改/查 │
├─────────────┼─────────────────────────┤
│ 高效操作 │ 尾部增删(append/pop) │
├─────────────┼─────────────────────────┤
│ 低效操作 │ 头部/中间插入(insert) │
├─────────────┼─────────────────────────┤
│ 高级用法 │ 推导式、嵌套列表、排序 │
└─────────────┴─────────────────────────┘
更多推荐


所有评论(0)