一、什么是 for 循环?
for循环是Python中用于遍历可迭代对象的循环结构。它可以逐个访问序列(如字符串、列表、元组)或其他可迭代对象(如字典、集合)中的每个元素。
fruits = ["苹果", "香蕉", "橙子"]for fruit in fruits:print(fruit)# 输出:# 苹果# 香蕉# 橙子
二、for 循环的基本语法
for 变量 in 可迭代对象: 循环体(对每个元素执行的代码)
语法要点:
- •
变量 是临时变量,每次循环会被赋值为可迭代对象中的下一个元素。 - • 可迭代对象可以是字符串、列表、元组、字典、集合等。
三、遍历不同类型的对象
3.1 遍历字符串
word = "Python"for char in word:print(char)# 输出:# P# y# t# h# o# n
3.2 遍历列表
colors = ["红", "绿", "蓝"]for color in colors:print(color)
3.3 遍历元组
point = (10, 20, 30)for coord in point:print(coord)
3.4 遍历字典
遍历字典时,默认遍历的是键(key)。
user = {"name": "张三", "age": 25, "city": "北京"}# 遍历键for key in user:print(key, "→", user[key])# 等价于for key in user.keys():print(key)# 遍历值for value in user.values():print(value)# 同时遍历键和值for key, value in user.items():print(key, ":", value)
3.5 遍历集合
tags = {"Python", "Java", "C++"}for tag in tags:print(tag) # 顺序不确定,因为集合是无序的
3.6 使用 range() 生成数字序列
Python 提供了内置函数 range(),可以生成一系列数字,常用于固定次数的循环。
# 循环5次,i 依次为 0,1,2,3,4for i inrange(5):print(i)# 从2到5(不包括6)for i inrange(2, 6):print(i)# 步长为2for i inrange(1, 10, 2):print(i)
range() 的详细用法将在后续进阶部分学习,这里只需要知道它可以帮我们生成循环次数即可。
四、for-else 语句
for 循环可以带 else 子句。else 中的代码在循环正常结束(即没有被 break 终止)后执行。
for i inrange(5):print(i)else:print("循环正常结束")# 输出:# 0 1 2 3 4# 循环正常结束
如果循环被 break 提前终止,则 else 不会执行:
for i inrange(5):if i == 3:breakprint(i)else:print("循环正常结束") # 不会执行# 输出:0 1 2
应用场景: 搜索时判断是否找到,例如:
numbers = [1, 3, 5, 7, 9]target = 4for n in numbers:if n == target:print("找到了")breakelse:print("没找到") # 没找到时执行
五、break 和 continue 在 for 循环中
- •
continue:跳过本次循环的剩余代码,直接进入下一次迭代。
for i inrange(1, 6):if i == 3:continue# 跳过3if i == 5:break# 到5时终止print(i)# 输出:1 2 4
注意:continue 后,循环变量会自动更新为下一个值,不需要手动操作。
六、嵌套 for 循环
一个 for 循环内部可以包含另一个 for 循环,称为嵌套循环。常用于处理二维数据结构或生成组合。
# 打印九九乘法表for i inrange(1, 10):for j inrange(1, i+1):print(f"{j}×{i}={i*j}", end="\t")print() # 换行
执行过程: 外层循环每执行一次,内层循环会完整执行一轮。
七、实战案例
案例1:求列表中所有偶数的和
numbers = [12, 7, 8, 15, 22, 31, 40]total = 0for num in numbers:if num % 2 == 0: total += numprint("偶数和:", total)
案例2:统计字符串中元音字母的个数
text = "Hello Python Programming"vowels = "aeiouAEIOU"count = 0for char in text:if char in vowels: count += 1print("元音字母个数:", count)
案例3:将列表中的单词首字母大写
words = ["hello", "world", "python", "loop"]capitalized = []for word in words: capitalized.append(word.capitalize())print(capitalized) # ['Hello', 'World', 'Python', 'Loop']
案例4:使用 enumerate 同时获取索引和值
enumerate() 函数可以在遍历时获取元素的索引和值。
fruits = ["苹果", "香蕉", "橙子"]for index, fruit inenumerate(fruits):print(f"{index}: {fruit}")# 输出:# 0: 苹果# 1: 香蕉# 2: 橙子
案例5:打印菱形(嵌套循环)
n = 5# 上半部分for i inrange(1, n+1):print(" " * (n-i) + "*" * (2*i-1))# 下半部分for i inrange(n-1, 0, -1):print(" " * (n-i) + "*" * (2*i-1))
案例6:遍历两个列表并配对(zip)
zip() 可以将多个可迭代对象中对应的元素打包成元组。
names = ["张三", "李四", "王五"]scores = [85, 92, 78]for name, score inzip(names, scores):print(f"{name}: {score}")
案例7:列表推导式(for 循环的简洁写法)
列表推导式是 Python 中一种优雅地生成列表的方式。
# 传统写法squares = []for i inrange(1, 6): squares.append(i**2)print(squares) # [1, 4, 9, 16, 25]# 列表推导式squares = [i**2for i inrange(1, 6)]print(squares) # [1, 4, 9, 16, 25]# 带条件的列表推导式even_squares = [i**2for i inrange(1, 11) if i % 2 == 0]print(even_squares) # [4, 16, 36, 64, 100]
八、常见错误与注意事项
8.1 在遍历列表时修改列表
错误示例:
numbers = [1, 2, 3, 4, 5]for n in numbers:if n % 2 == 0: numbers.remove(n) # 在遍历中修改列表会导致意外行为print(numbers) # 可能不是预期结果
正确做法: 可以遍历列表的副本,或使用列表推导式生成新列表。
numbers = [1, 2, 3, 4, 5]numbers = [n for n in numbers if n % 2 != 0] # 留下奇数print(numbers) # [1, 3, 5]
8.2 忘记冒号
for i inrange(5) # 缺少冒号print(i)
8.3 缩进错误
循环体必须缩进,且同一层代码要对齐。
8.4 循环变量未使用
如果循环变量在循环体内没用到,可以用下划线 _ 表示。
for _ inrange(5):print("Hello") # 循环5次,不需要索引
8.5 遍历字典时修改字典
与列表类似,遍历字典时最好不要增删键值对,否则可能引发 RuntimeError。可以遍历字典的副本(如 list(dict.items()))。
九、总结
- •
for 循环是 Python 中最常用的循环结构,用于遍历任何可迭代对象。 - • 基本语法:
for 变量 in 可迭代对象: 循环体。 - •
break 提前退出循环,continue 跳过本次迭代。 - •
enumerate() 和 zip() 提供了更便捷的遍历方式。
掌握 for 循环是 Python 编程的基础,多写多练,很快就能熟练运用。