目录
4.1 列表与索引
列表是可变的顺序容器,通过方括号创建:
fruits = ["apple", "banana", "cherry"]
colors = ["red", 255, (1,0,0)] # 支持混合类型
索引规则:
-
正向索引:0开始,
fruits[0] → "apple"
-
负向索引:-1表示最后元素,
fruits[-1] → "cherry"
4.2 列表修改
操作 | 示例 | 效果 |
---|---|---|
直接修改 | fruits[1] = "mango" | 替换索引1的元素 |
追加元素 | fruits.append("grape") | 列表末尾添加元素 |
删除元素 | del fruits[0] | 删除第一个元素 |
4.3 相关内置函数
nums = [3, 1, 4, 1, 5]
print(len(nums)) # 5 → 元素数量
print(max(nums)) # 5 → 最大值
print(min(nums)) # 1 → 最小值
print(sum(nums)) # 14 → 求和
print(sorted(nums)) # [1, 1, 3, 4, 5]
4.4 列表项处理
遍历与过滤:
nums = [3, 1, 4, 1, 5]
print(len(nums)) # 5 → 元素数量
print(max(nums)) # 5 → 最大值
print(min(nums)) # 1 → 最小值
print(sum(nums)) # 14 → 求和
print(sorted(nums)) # [1, 1, 3, 4, 5]
4.5 切片操作
语法:list[start:end:step]
letters = ['a', 'b', 'c', 'd', 'e']
print(letters[1:3]) # ['b', 'c']
print(letters[::2]) # ['a', 'c', 'e']
print(letters[::-1]) # 反转列表 → ['e', 'd', 'c', 'b', 'a']
4.6 别名机制
列表赋值创建引用(非副本):
a = [1, 2, 3]
b = a # 创建别名
b[0] = 99
print(a) # [99, 2, 3] → 原列表被修改
创建独立副本:
c = a.copy() # 或 c = a[:]
4.7 列表方法
方法 | 作用 | 示例 |
---|---|---|
append() | 末尾添加元素 | nums.append(9) |
insert() | 指定位置插入 | nums.insert(0, 0) |
remove() | 删除首个匹配值 | nums.remove(1) |
pop() | 删除并返回指定索引元素 | nums.pop(2) |
sort() | 原地排序 | nums.sort(reverse=True) |
reverse() | 反转列表顺序 | nums.reverse() |
4.8 嵌套列表
二维列表操作:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrix[1][2]) # 6 → 第二行第三列
4.9 其他序列类型
类型 | 特性 | 示例 |
---|---|---|
元组 | 不可变序列 | t = (1, "a") |
字符串 | 不可变的字符序列 | s = "hello" |
range | 不可变的数字序列 | r = range(1,5) →1-4 |
4.10 文件视为列表
with open("data.txt") as f:
lines = f.readlines() # 按行读取为列表
# 处理每行内容
for line in lines:
print(line.strip())
4.11 注释规范
# 单行注释:说明下方代码功能
population = 8_900_000 # 单位:万人(行尾注释)
"""
多行注释:解释复杂逻辑
参数说明:
- data: 二维坐标列表
- threshold: 过滤阈值
"""
def process_data(data, threshold):
pass
4.12 本章小结
核心知识:
-
列表是可变有序集合,支持索引/切片操作
-
切片语法可灵活提取子序列
-
列表方法实现原地修改(
sort()
/append()
等) -
嵌套列表用于处理多维数据
-
文件内容可转化为列表逐行处理
-
元组/字符串是不可变序列类型
关键区别:
操作 | 列表 | 元组 |
---|---|---|
修改元素 | 支持 | 不支持 |
内存占用 | 较大 | 较小 |
适用场景 | 动态数据集 | 固定数据 |
最佳实践:
-
优先选择列表推导式替代循环操作
-
修改列表时注意别名问题
-
大文件处理使用生成器替代
readlines()
-
注释应解释为什么而非做什么