在 Python 中,循环用于重复执行代码块,主要有两种类型:
for循环:遍历序列(如列表、元组、字符串、字典)或可迭代对象。while循环:在条件为True时重复执行。
此外,还可以用 break(退出循环)、continue(跳过当前迭代)和 else(循环正常结束时执行)控制循环流程。
1. for 循环
(1) 基本语法
for 变量 in 可迭代对象:
# 循环体
(2) 示例
遍历列表
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
# 输出:
# apple
# banana
# orange
遍历字符串
for char in "Python":
print(char)
# 输出:
# P
# y
# t
# h
# o
# n
遍历字典
person = {"name": "Alice", "age": 25}
for key in person:
print(key, ":", person[key])
# 输出:
# name : Alice
# age : 25
使用 range() 生成数字序列
for i in range(5): # 0 到 4
print(i)
# 输出:
# 0
# 1
# 2
# 3
# 4
for i in range(1, 6, 2): # 1 到 5(步长 2)
print(i)
# 输出:
# 1
# 3
# 5
enumerate() 获取索引和值
fruits = ["apple", "banana", "orange"]
for idx, fruit in enumerate(fruits):
print(f"索引 {idx}: {fruit}")
# 输出:
# 索引 0: apple
# 索引 1: banana
# 索引 2: orange
zip() 并行遍历多个序列
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name}: {age}")
# 输出:
# Alice: 25
# Bob: 30
# Charlie: 35
2. while 循环
(1) 基本语法
while 条件:
# 循环体
(2) 示例
基本用法
count = 0
while count < 5:
print(count)
count += 1
# 输出:
# 0
# 1
# 2
# 3
# 4
用户输入验证
while True:
password = input("请输入密码(至少6位): ")
if len(password) >= 6:
print("密码有效")
break
else:
print("密码太短,请重试!")
3. 循环控制
(1) break:退出循环
for i in range(10):
if i == 5:
break
print(i)
# 输出:
# 0
# 1
# 2
# 3
# 4
(2) continue:跳过当前迭代
for i in range(5):
if i == 2:
continue
print(i)
# 输出:
# 0
# 1
# 3
# 4
(3) else:循环正常结束时执行
for i in range(3):
print(i)
else:
print("循环结束")
# 输出:
# 0
# 1
# 2
# 循环结束
# 如果循环被 break 终止,else 不会执行
for i in range(3):
if i == 1:
break
print(i)
else:
print("不会执行")
# 输出:
# 0
4. 嵌套循环
for i in range(3):
for j in range(2):
print(f"i={i}, j={j}")
# 输出:
# i=0, j=0
# i=0, j=1
# i=1, j=0
# i=1, j=1
# i=2, j=0
# i=2, j=1
5. 列表推导式(高效生成列表)
# 生成平方数列表
squares = [x**2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
# 带条件的列表推导式
even_squares = [x**2 for x in range(5) if x % 2 == 0]
print(even_squares) # [0, 4, 16]
6. 生成器表达式(节省内存)
# 生成一个生成器对象(惰性计算)
gen = (x**2 for x in range(5))
print(gen) # <generator object>
# 逐个获取值
for num in gen:
print(num)
# 输出:
# 0
# 1
# 4
# 9
# 16
7. 常见循环场景
(1) 遍历文件内容
with open("file.txt", "r") as f:
for line in f:
print(line.strip()) # 逐行读取并去除换行符
(2) 无限循环(慎用)
while True:
cmd = input("输入 'exit' 退出: ")
if cmd == "exit":
break
print(f"你输入了: {cmd}")
(3) 倒计时
import time
for i in range(5, 0, -1):
print(i)
time.sleep(1) # 暂停 1 秒
print("发射!")
8. 注意事项
-
避免无限循环:确保
while循环的条件能变为False。 -
修改遍历对象的风险:
numbers = [1, 2, 3] for num in numbers: numbers.remove(num) # 可能导致意外行为 print(numbers) # 可能输出 [2](错误示例)正确做法:遍历副本或使用列表推导式创建新列表。
-
性能优化:
- 优先用
for循环遍历可迭代对象(如range、列表)。 - 需要惰性计算时用生成器表达式(
(x for x in range(10)))。
- 优先用
总结
| 循环类型 | 适用场景 | 特点 |
|---|---|---|
for | 遍历序列、字典、文件等 | 直接迭代元素,支持 range、enumerate、zip |
while | 条件控制循环 | 适合不确定次数的循环(如用户输入验证) |
break | 提前退出循环 | 立即终止当前循环 |
continue | 跳过当前迭代 | 直接进入下一次循环 |
else | 循环正常结束时执行 | 若循环被 break 终止则不执行 |