如果你刚接触 Python,可能很快就会遇到一个绕不开的关键字——for
。 有人说,Python 的 for 循环就像是一把“万能钥匙”,不管是数字、字符串、列表、字典,还是更复杂的数据结构,它都能轻轻松松帮你解锁。
我第一次用 Python 写 for 循环时,感觉就像小时候数台阶:
- 以前用 while 循环,要自己算条件、手动加 1,很容易掉坑里。
- 但 Python 的 for 循环,就像“自动扶梯”,你只需要告诉它要走几级台阶,它会把你送到终点,顺带还能报个数。
今天这篇文章,我会带你把 for 循环的方方面面都过一遍,保证你看完之后,不仅能写,还能用好。
一、for 循环的基本用法
先上最核心的语法:
for 变量 in 序列:
# 循环体
else:
# 循环正常结束后执行
和 while 循环比起来,for 循环更“优雅”,特别适合用在 已知要循环多少次 或者 要遍历一个集合 的场景。
比如最经典的:打印 1 到 4。
for i in range(1, 5):
print(i)
else:
print('The for loop is over')
输出:
1
2
3
4
The for loop is over
看出来了吗?for 循环跑完之后,还能接一个 else
。这个 else
只有在循环 没有被 break 打断 的情况下才会执行。
这小细节,很多新手一开始都会忽略。
二、range():for 循环的好搭档
如果说 for 是“万能钥匙”,那 range()
就是最常见的“锁芯”。
它能快速生成一个整数序列,有三种用法:
- 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(1, 10, 2):
print(i) # 输出1,3,5,7,9
是不是特别像小时候玩“跳房子”?你可以一格一格数,也可以隔一格跳。
三、for 循环能遍历啥?
Python 的 for 循环简直就是个“社交达人”,只要是可迭代的对象,它都能聊。 最常见的就是字符串、列表和字典。
1. 遍历字符串
word = "Python"
for letter in word:
print(letter)
输出:
P
y
t
h
o
n
字符串被拆开,字母一个个输出,就像你逐个拆盲盒。
2. 遍历列表
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(f"I like {fruit}")
输出:
I like apple
I like banana
I like orange
是不是很适合写购物清单提醒?
3. 遍历字典
person = {'name': 'Alice', 'age': 25, 'city': 'New York'}
for key in person:
print(f"{key}: {person[key]}")
# 更好的方式
for key, value in person.items():
print(f"{key}: {value}")
两种写法,一种是“逐个问名字”,另一种是“直接报全套”,后者更优雅。
四、嵌套 for 循环:乘法表的秘密
如果 for 循环是单人舞,那嵌套 for 就是集体舞。
比如小学时学过的乘法表,用 Python 写就是这样:
for i in range(1, 10):
for j in range(1, i+1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
输出的效果就是熟悉的九九乘法表。 每次看到这种代码,我都觉得编程和童年数学课产生了奇妙的连接。
五、for-else:隐藏的宝藏
你知道吗?Python 的 for 循环居然还能搭配 else
。 这个 else
只有在循环 正常结束 的时候才会执行,一旦中途被 break
打断,就不会触发。
举个例子:判断质数。
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(f"{n} equals {x} * {n//x}")
break
else:
print(f"{n} is a prime number")
输出:
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
...
很巧妙吧?内层循环如果没有 break,才会执行 else
。 这就是 Python 的“优雅黑魔法”。
六、高级玩法:让 for 更有范儿
1. enumerate:要值也要索引
fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
输出:
Index 0: apple
Index 1: banana
Index 2: cherry
再也不用手动写 i += 1
了。
2. zip:并行迭代
names = ['Alice', 'Bob', 'Charlie']
ages = [24, 30, 28]
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
输出:
Alice is 24 years old
Bob is 30 years old
Charlie is 28 years old
两个列表“手牵手”,一起走。
3. 列表推导式:一句话搞定循环
# 传统方式
squares = []
for x in range(10):
squares.append(x**2)
# 列表推导式
squares = [x**2 for x in range(10)]
一句话代替 4 行,简洁到飞起。
七、实战案例
案例 1:文件单词统计
word_count = {}
with open('example.txt', 'r') as file:
for line in file:
words = line.strip().split()
for word in words:
word_count[word] = word_count.get(word, 0) + 1
print(word_count)
一个小小的 for 循环,就能帮你完成简易版的“词频分析器”。
案例 2:学生成绩平均分
students = [
{'name': 'Alice', 'scores': [85, 90, 88]},
{'name': 'Bob', 'scores': [76, 82, 79]},
{'name': 'Charlie', 'scores': [91, 89, 93]}
]
for student in students:
avg = sum(student['scores']) / len(student['scores'])
print(f"{student['name']}'s average score: {avg:.2f}")
输出:
Alice's average score: 87.67
Bob's average score: 79.00
Charlie's average score: 91.00
是不是很像老师在批改作业?
八、for 循环的注意事项
别在遍历时修改列表: 一边迭代一边修改,可能会出现“漏掉”或“乱序”的情况。
break/continue 慎用: 太多跳转会让代码变得难以理解。
性能要考虑: 大数据量时,可以考虑用生成器表达式来节省内存。
选择合适的循环: 确定要遍历序列?用 for。 不确定次数?用 while。
九、写在最后
Python 的 for 循环,看似简单,其实很强大。 它既能处理日常的小任务(比如遍历列表),也能支撑复杂的数据处理(比如词频统计)。
更重要的是,它让代码变得“直观、干净、易读”。
记住一句话: 👉 当你需要“遍历”的时候,第一时间想起 for 循环。
阅读原文:https://mp.weixin.qq.com/s/6je11d69VM97jiS8d8Uk6g
该文章在 2025/9/18 17:49:33 编辑过