Python for 循环基础与进阶详解
一、for 循环概述
for 循环是 Python 中用于遍历序列(如列表、元组、字符串)或其他可迭代对象的核心控制结构。它是 Python 提供的第二种循环机制,第一种为 while 循环。
1. 核心目的
使用 for 循环的主要目的是简化遍历取值的过程。相比于 while 循环需要手动维护索引变量和终止条件,for 循环能够自动处理迭代过程,使代码更加简洁、可读性更强。
本文详细介绍了 Python 中 for 循环的基础语法、适用场景及与 while 循环的区别。内容涵盖可迭代对象遍历、range 函数的多种用法、循环控制语句(break、continue、else)的逻辑解析,以及 enumerate 和 zip 等进阶技巧。通过列表、字典遍历及嵌套循环案例,深入讲解了循环控制流,并提供了九九乘法表和金字塔打印等实战练习,旨在帮助开发者全面掌握 Python 循环机制。

for 循环是 Python 中用于遍历序列(如列表、元组、字符串)或其他可迭代对象的核心控制结构。它是 Python 提供的第二种循环机制,第一种为 while 循环。
使用 for 循环的主要目的是简化遍历取值的过程。相比于 while 循环需要手动维护索引变量和终止条件,for 循环能够自动处理迭代过程,使代码更加简洁、可读性更强。
in 关键字后包含的可迭代对象的元素个数。适用于已知集合的遍历。基本语法如下:
for 变量名 in 可迭代对象:
# 循环体代码
pass
l = ['lsj', 'a', 'b']
for x in l:
print(x)
运行结果:
lsj
a
b
直接遍历列表中的元素是最常见的用法。
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(f"I like {fruit}")
在遍历字典时,默认只遍历键(key)。如果需要同时获取键和值,可以使用 .items() 方法。
dic = {'name': 'lsj', 'age': 18, 'gender': 'male'}
# 默认遍历 key
for k in dic:
print(k, dic[k])
# 推荐方式:同时遍历 key 和 value
for k, v in dic.items():
print(f"{k}: {v}")
当需要处理多维数据或打印特定图形时,常使用嵌套 for 循环。
# 打印 3x5 的星号矩阵
for i in range(3):
for j in range(5):
print("*", end='')
print() # 换行
range() 函数用于生成整数序列,常用于配合 for 循环控制迭代次数。
range(stop):生成从 0 到 stop-1 的整数序列。range(start, stop):生成从 start 到 stop-1 的整数序列。range(start, stop, step):生成从 start 开始,以 step 为步长,直到 stop-1 的序列。print(list(range(6))) # [0, 1, 2, 3, 4, 5]
print(list(range(1, 10))) # [1, 2, ..., 9]
print(list(range(1, 10, 2)))# [1, 3, 5, 7, 9]
range() 返回一个列表,占用内存较大。range() 返回一个范围对象(类似生成器),按需计算数值,内存效率极高。虽然可以通过 range(len(l)) 配合索引访问列表,但 PEP8 规范不推荐这种方式,因为它不如直接遍历元素直观且易出错。
l = ['lsj', 'a', 'c']
# 不推荐:通过索引
for i in range(len(l)):
print(i, l[i])
# 推荐:直接遍历
for x in l:
print(x)
# 最佳实践:使用 enumerate 获取索引和值
for index, value in enumerate(l):
print(index, value)
break 用于立即终止当前所在的整个循环,跳出循环体继续执行循环后的代码。
for i in range(5):
if i == 3:
break
print(i) # 输出 0, 1, 2
continue 用于跳过当前迭代剩余的代码,直接进入下一次迭代。
for i in range(5):
if i == 3:
continue
print(i) # 输出 0, 1, 2, 4
for...else 结构比较特殊。只有当循环正常结束(即没有被 break 中断)时,else 块才会执行。
for i in range(3):
if i == 5:
break
else:
print("Loop completed normally") # 会执行
在需要同时获取索引和值的场景下,enumerate() 比 range(len()) 更高效且语义更清晰。
names = ['Alice', 'Bob', 'Charlie']
for idx, name in enumerate(names):
print(f"Index {idx}: {name}")
用于并行遍历多个可迭代对象。
keys = ['a', 'b', 'c']
values = [1, 2, 3]
for k, v in zip(keys, values):
print(k, v)
结合 for 循环的简洁写法,用于快速生成列表。
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, ...]
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i}*{j}={i*j}', end=' ')
print()
分析规律:第 n 层空格数为 max_level - current_level,星号数为 2 * current_level - 1。
max_level = 5
for current_level in range(1, max_level + 1):
# 打印前导空格
for i in range(max_level - current_level):
print(' ', end='')
# 打印星号
for j in range(2 * current_level - 1):
print('*', end='')
# 换行
print()
Python 的 for 循环是处理序列数据的基石。掌握其语法、与 range 的配合、以及 break/continue/else 的控制逻辑,是编写高效 Python 代码的前提。在实际开发中,应优先选择直接遍历而非索引遍历,并善用 enumerate 和 zip 等内置工具提升代码质量。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online