23.1 for 循环是什么? #
for 循环用于遍历可迭代对象(列表、字典、字符串、文件行等),对每个元素执行同一段代码。项目里处理列表、字典、查询结果时几乎每天都会用到。
for fruit in ["apple", "banana", "cherry"]:
print(fruit)23.2 基本语法 #
for 变量 in 可迭代对象:
# 循环体(缩进 4 空格)23.3 遍历集合 #
23.3.1 列表 #
users = ["Alice", "Bob", "Charlie"]
for user in users:
print(user)23.3.2 字典 #
项目里最常用的是 items(),同时拿到键和值:
person = {"name": "Alice", "age": 30, "city": "Beijing"}
for key, value in person.items():
print(f"{key}: {value}")只需键或值时:
for key in person: # 默认遍历键
print(key)
for value in person.values():
print(value)字符串、元组、集合同理:for x in obj。
23.4 range():按次数或索引循环 #
range() 用于生成一个指定范围的整数序列,常用来控制 for 循环次数或获得索引。
range(stop)
只传一个参数时,从 0 开始到 stop(不包括 stop),步长为 1。 例如:range(5)得到 0, 1, 2, 3, 4range(start, stop)
从 start 开始,到 stop(不包括 stop),步长为 1。 例如:range(2, 6)得到 2, 3, 4, 5range(start, stop, step)
从 start 开始,到 stop(不包括 stop),步长为 step。 例如:range(0, 10, 2)得到 0, 2, 4, 6, 8
注意:
- stop 总是“开区间”,不包含在结果序列内。
- step 可以为负数,表示倒序遍历。例如:
range(10, 0, -2)得到 10, 8, 6, 4, 2
# range(stop) → 0 到 stop-1
for i in range(5):
print(i) # 0 1 2 3 4
# range(start, stop) → start 到 stop-1
for i in range(2, 6):
print(i) # 2 3 4 5
# range(start, stop, step)
for i in range(0, 10, 2):
print(i) # 0 2 4 6 8需要下标访问列表时,更推荐下面的 enumerate(),而不是 range(len(lst))。
23.5 enumerate():同时拿索引和元素 #
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(index, fruit)
# 从 1 开始编号(展示用)
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)23.6 break 与 continue #
| 语句 | 作用 |
|---|---|
break |
立即结束整个循环 |
continue |
跳过本次剩余代码,进入下一轮 |
for num in [2, 5, 8, 12, 7]:
if num > 10:
print(f"找到: {num}")
break
print(f"检查: {num}")
for i in range(10):
if i % 2 == 0:
continue
print(i) # 只打印奇数23.7 zip():并行遍历多个序列 #
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}: {score}")23.8 列表推导式 #
用一行从可迭代对象生成新列表,项目里很常见:
numbers = [2, 4, 6, 8, 10]
# 等价于 for 循环 + append
squares = [x ** 2 for x in range(5)] # [0, 1, 4, 9, 16]
print(squares)
positive = [x for x in numbers if x > 0] # 带条件过滤
print(positive)23.9 常见注意点 #
不要在遍历时直接修改正在遍历的列表(会跳过元素):
# 错误
numbers = [2, 4, 6, 8]
for num in numbers:
if num % 2 == 0:
numbers.remove(num)
# 正确:用新列表或推导式
numbers = [num for num in numbers if num % 2 != 0]变量名要有意义:for student in students 优于 for i in l。
23.10 项目开发要点 #
- 遍历集合用
for,不要用while+ 下标(除非有特殊需求) - 字典优先
for k, v in d.items(),处理 ORM 字段、JSON、配置时常用 - 需要索引用
enumerate(),少用range(len(lst)) - 读文件:
for line in open(...)或for line_num, line in enumerate(f, 1): - 过滤、映射列表可考虑列表推导式,保持可读即可,不宜嵌套过深
- 嵌套循环:二维数据、组合遍历时会用到;注意性能,大数据考虑向量化或数据库层处理
23.11 总结 #
| 概念 | 语法 | 用途 |
|---|---|---|
| 基本循环 | for item in collection: |
遍历元素 |
| 数字序列 | range(start, stop, step) |
固定次数或数字序列 |
| 索引+元素 | enumerate(collection) |
同时拿索引和值 |
| 多序列 | zip(a, b) |
并行遍历 |
| 控制流程 | break / continue |
提前结束或跳过本次 |
| 生成列表 | [expr for x in iterable] |
简洁地构造新列表 |