在 Python 编程中,循环结构(Loop Structure) 是程序控制流的重要组成部分。其中,for...in
循环是 Python 中最常用、最简洁的迭代工具之一。
与传统的 C 风格语言中的 for
不同,Python 的 for...in
循环专门用于遍历可迭代对象(Iterable),如列表、元组、字符串、字典、集合,甚至是生成器等。
本文将带你深入了解:
for...in
循环的基本语法;break
、continue
、else
);无论你是刚入门的新手,还是希望提升编程技巧的老手,这篇文章都将为你提供实用的知识点!
for...in
循环?
for...in
是一种基于可迭代对象进行逐项访问的循环结构。
它不像 while
循环那样依赖条件判断,而是自动遍历每一个元素,直到遍历完成为止。
for 变量 in 可迭代对象:
# 循环体代码
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
输出:
apple
banana
cherry
这段代码会依次打印出列表中的每个元素。
for...in
循环的工作机制__next__()
方法获取下一个元素;当所有元素都遍历完毕后,循环自动结束。
类型 | 示例 |
---|---|
列表(list) | ["a", "b", "c"] |
元组(tuple) | (1, 2, 3) |
字符串(str) | "hello" |
字典(dict) | {"name": "Tom", "age": 20} |
集合(set) | {1, 2, 3} |
生成器(generator) | (x**2 for x in range(5)) |
文件对象 | with open("file.txt") as f: |
在遍历字典时,默认遍历的是键(key),也可以选择遍历 .values()
或 .items()
。
nums = [1, 2, 3, 4, 5]
for num in nums:
print(num)
for ch in "Python":
print(ch)
person = {"name": "Alice", "age": 25, "gender": "female"}
# 默认遍历 key
for key in person:
print(key)
# 遍历 value
for value in person.values():
print(value)
# 同时遍历 key 和 value
for key, value in person.items():
print(f"{key}: {value}")
range()
控制循环次数for i in range(5):
print("第", i+1, "次循环")
enumerate()
获取索引和值words = ["cat", "window", "defenestrate"]
for index, word in enumerate(words):
print(f"第 {index} 个单词是:{word}")
非常适合需要同时处理索引和元素的场景。
for...in
循环的扩展结构else
子句当 for
循环正常结束(即遍历完所有元素),而不是被 break
中断时,可以执行 else
分支。
for i in range(3):
print(i)
else:
print("循环结束")
输出:
0
1
2
循环结束
如果你在循环中用了 break
,则 else
分支不会执行。
break
提前退出循环for i in range(10):
if i == 5:
break
print(i)
适用于提前满足条件时终止循环。
continue
跳过当前循环for i in range(5):
if i % 2 == 0:
continue
print(i)
跳过偶数,只打印奇数。
data = ["1", "2", "3", "4"]
int_data = [int(x) for x in data] # 列表推导式简化写法
import os
for filename in os.listdir("my_folder"):
if filename.endswith(".txt"):
print("处理文件:", filename)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for item in row:
print(item, end=" ")
print()
state = "start"
for char in input_string:
if state == "start":
if char == 'a':
state = "middle"
elif state == "middle":
if char == 'b':
state = "end"
break
适用于解析特定格式的数据流或协议。
错误类型 | 描述 | 正确做法 |
---|---|---|
❗ 忘记缩进 | 导致语法错误 | 使用统一缩进风格(推荐 4 空格) |
❗ 修改正在遍历的序列 | 可能导致无限循环或遗漏元素 | 遍历副本或创建新列表 |
❗ 混淆 range() 和直接遍历列表 |
冗余写法 | 推荐直接 for item in list: |
❗ 忽略空序列 | 循环不执行 | 可加判断或默认处理 |
for...in
与 while
循环对比特性 | for...in 循环 |
while 循环 |
---|---|---|
是否依赖可迭代对象 | ✅ 是 | ❌ 否 |
更适合场景 | 已知迭代次数或对象 | 条件驱动的循环 |
是否容易造成死循环 | ❌ 否 | ✅ 是 |
是否支持 else |
✅ 是 | ✅ 是 |
控制流程灵活性 | ⚠️ 有限 | ✅ 高 |
总结:如果你知道要遍历什么内容,用 for
;如果你不知道要循环多少次,用 while
。
结构 | 是否支持 else |
是否支持 break |
是否支持 continue |
是否易导致死循环 |
---|---|---|---|---|
for...in |
✅ 是 | ✅ 是 | ✅ 是 | ❌ 否 |
while |
✅ 是 | ✅ 是 | ✅ 是 | ✅ 是 |
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!