python - 循环

53 阅读3分钟

在 Python 中,循环用于重复执行代码块,主要有两种类型:

  1. for 循环:遍历序列(如列表、元组、字符串、字典)或可迭代对象。
  2. 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. 注意事项

  1. 避免无限循环:确保 while 循环的条件能变为 False

  2. 修改遍历对象的风险

    numbers = [1, 2, 3]
    for num in numbers:
        numbers.remove(num)  # 可能导致意外行为
    print(numbers)  # 可能输出 [2](错误示例)
    

    正确做法:遍历副本或使用列表推导式创建新列表。

  3. 性能优化

    • 优先用 for 循环遍历可迭代对象(如 range、列表)。
    • 需要惰性计算时用生成器表达式((x for x in range(10)))。

总结

循环类型适用场景特点
for遍历序列、字典、文件等直接迭代元素,支持 rangeenumeratezip
while条件控制循环适合不确定次数的循环(如用户输入验证)
break提前退出循环立即终止当前循环
continue跳过当前迭代直接进入下一次循环
else循环正常结束时执行若循环被 break 终止则不执行