Python for 循环
Python3 学习笔记 · 整理自菜鸟教程
一句话
for 循环遍历任何可迭代对象,逐个取出元素执行循环体;它不是“计数循环”,而是“遍历循环”,配合 range 才做定次循环。
要点
- 语法:
for 变量 in 可迭代对象:+ 缩进循环体,没有 C 风格的三段式写法。 - 可遍历:列表、元组、字符串、字典、集合、
range、文件对象、生成器等一切可迭代对象。 range(start, stop, step)生成整数序列,左闭右开,惰性求值不占内存。for...else:循环没被 break 正常跑完才执行else,常用于“找有没有”。break立即结束整个循环;continue跳过本次剩余语句进入下一轮。enumerate()同时拿索引和值;zip()并行遍历多个序列(以最短为准)。- 字典直接遍历得到键,要值用
d.values(),要键值对用d.items()。 - 循环变量在循环结束后仍保留最后一次的值(Python 没有块级作用域)。
- 遍历时不要修改被遍历的容器,否则会漏元素或报错。
- 嵌套循环中
break只跳出最内层。
语法 / 常用方法
| 语法 | 说明 | 示例 |
|---|---|---|
for x in it: |
遍历可迭代对象 | for c in 'abc': |
for i in range(n): |
0 到 n-1 | range(3) → 0,1,2 |
range(a, b) |
a 到 b-1 | range(1, 4) → 1,2,3 |
range(a, b, s) |
带步长,s 可负 | range(5, 0, -1) |
for...else: |
未 break 时执行 else | 查找场景 |
break |
结束整个循环 | 提前退出 |
continue |
跳过本次 | 过滤条件 |
enumerate(it, start=0) |
索引 + 值 | for i, v in enumerate(lst) |
zip(a, b) |
并行遍历,截断到最短 | for x, y in zip(a, b) |
reversed(seq) |
反向遍历 | for x in reversed(lst) |
sorted(it) |
遍历排序结果 | 不改原数据 |
d.items() |
遍历字典键值对 | for k, v in d.items() |
for _ in range(n) |
只重复 n 次 | _ 表忽略变量 |
| 嵌套 for | 多层遍历 | 乘法表 |
代码示例
1 | |
易错点
range左闭右开:range(1, 5)是 1~4,想要 5 得写range(1, 6)。for...else的else是“没 break 才执行”,不是普通的“循环结束就执行”,语义容易记反。- 遍历列表时
remove()会跳过元素(索引前移),改遍历副本或在函数里构造新列表。 - 直接改循环变量不会影响原容器:
for x in lst: x = 0改的是副本引用。 zip遇到长度不等会截断到最短,数据对不齐时不报错,容易默默丢数据。- 字典遍历顺序在现代 Python 里是插入顺序,但别依赖历史版本,需要顺序就显式
sorted。 break不跳出多层嵌套,跨层退出要用函数return或标志位。