Python for循环基础语法:遍历列表、字典与字符串

白榆
白榆
发布时间:2026-11-13| 5人浏览过
原创

深入浅出讲解Python for循环的基础语法与运行机制,涵盖列表、字典与字符串的三种核心遍历方式,配合enumerate与items解包技巧,以及避坑指南与总结矩阵。

在 Python 编程中,for 循环是最基本、使用频次最高的流程控制结构之一。与 C/Java 等语言中依赖索引计数器(如 for (int i=0; i<n; i++))不同,Python 的 for 循环本质上是一个“迭代器遍历器”。它直接作用于可迭代对象(Iterable),无论对象是序列还是映射,都能以清晰、直观的语法逐项提取元素。本文将详细讲解 Python 中最常用的三种容器与序列——列表(List)、字典(Dictionary)与字符串(String)的基础遍历语法、执行机理及典型应用,帮助读者建立系统、规范的循环认知。

一、for循环核心语法与底层执行逻辑

Python 中 for 循环的基本语法由 for、in 关键字以及缩进的代码块组成:

for 目标变量 in 可迭代对象:
    # 每次迭代执行的具体操作
    执行语句

这里的“可迭代对象”是指任何实现了 __iter__() 方法或序列协议的对象。在循环开始前,Python 会在后台自动调用 iter() 函数获取该对象的迭代器;随后,每次循环都会调用迭代器的 next() 方法,将取出的下一个值赋给目标变量,并执行循环体。当所有元素耗尽时,迭代器会抛出 StopIteration 异常,Python 的 for 循环会自动捕获该异常并平稳退出循环。整个过程对开发者完全透明,既保证了语法的简洁,又避免了手动维护索引计数器可能带来的越界风险。

Python for循环基础语法:遍历列表、字典与字符串
图1展示了Python for循环从可迭代对象创建迭代器、逐项提取到自动捕获结束信号的全过程

二、遍历列表(List):直接访问与索引辅助

列表是 Python 中最常用的有序容器。在遍历列表时,主要有两种场景:只需访问元素内容,或者既需要访问元素又需要获得当前元素在列表中的序号。

1. 直接遍历元素

如果业务逻辑只需要读取列表里的每个数据项,直接将列表置于 in 之后是最简洁的写法:

fruits = ["苹果", "香蕉", "西瓜"]

for fruit in fruits:
    print(f"当前水果名称:{fruit}")
示例输出: 当前水果名称:苹果
当前水果名称:香蕉
当前水果名称:西瓜

2. 使用 enumerate() 同步获取索引

许多初学者习惯写 for i in range(len(fruits)): 来通过下标索引元素,这种写法在 Python 中并不推崇,因为其代码冗长且降低了可读性。Python 提供了内置函数 enumerate(),它会将可迭代对象包装为一个每次生成 (索引, 元素) 元组的迭代器:

fruits = ["苹果", "香蕉", "西瓜"]

# start 参数可指定起始索引,默认为 0
for index, fruit in enumerate(fruits, start=1):
    print(f"序号 {index} -> {fruit}")
示例输出: 序号 1 -> 苹果
序号 2 -> 香蕉
序号 3 -> 西瓜

三、遍历字符串(String):按字符展开

在 Python 中,字符串也是一种内置的序列类型(Sequence)。因此,对字符串执行 for 循环时,迭代器会把字符串按照字符位置依次解开,每次循环得到一个长度为 1 的单个字符(在 Python 中没有专门的 char 类型,单个字符仍然是 str 类型)。

language = "Python"

for char in language:
    print(f"字符: {char} (ASCII码: {ord(char)})")
示例输出: 字符: P (ASCII码: 80)
字符: y (ASCII码: 121)
字符: t (ASCII码: 116)
字符: h (ASCII码: 104)
字符: o (ASCII码: 111)
字符: n (ASCII码: 110)

遍历字符串常用于字符统计、数据过滤、密码规则校验等场景。下图对比了列表与字符串在内存中元素解包遍历的结构差异:

Python for循环基础语法:遍历列表、字典与字符串
图2展示了序列结构(列表与字符串)在for循环中如何逐项将元素解包绑定给目标变量

四、遍历字典(Dictionary):键、值与项的三种姿态

字典是键值对(Key-Value)映射容器。由于字典包含两组紧密关联但维度不同的数据,Python 提供了三种内置视图方法来满足不同的遍历诉求。

1. 默认遍历:直接获取键(Keys)

如果直接将字典传递给 for key in my_dict:,Python 默认只会迭代字典的所有键(Keys),等同于调用 my_dict.keys():

user_profile = {"name": "张伟", "role": "工程师", "city": "北京"}

for key in user_profile:
    # 可以在循环体内部通过字典下标取值
    print(f"键: {key} -> 值: {user_profile[key]}")
示例输出: 键: name -> 值: 张伟
键: role -> 值: 工程师
键: city -> 值: 北京

2. 值视图遍历:只关心数据(Values)

在只需统计、汇总或筛选数据值而完全不需要使用键的场景下,可以调用 .values() 方法:

scores = {"语文": 88, "数学": 95, "英语": 91}

total = 0
for score in scores.values():
    total += score

print(f"总分为: {total}")
示例输出: 总分为: 274

3. 项视图遍历:同时解包键与值(Items)

当需要同时处理键和对应的值时,最地道、最高效的做法是使用 .items()。该方法每次迭代产出一个形如 (key, value) 的元组,配合 Python 的多变量解包语法,可以直接在 for 后声明两个变量接收:

user_profile = {"name": "张伟", "role": "工程师", "city": "北京"}

for key, val in user_profile.items():
    print(f"属性 [{key}] 的设定值为: {val}")
示例输出: 属性 [name] 的设定值为: 张伟
属性 [role] 的设定值为: 工程师
属性 [city] 的设定值为: 北京
Python for循环基础语法:遍历列表、字典与字符串
图3展示了针对字典进行直接遍历、.values()遍历以及.items()解包遍历的数据流动与变量绑定对比

五、实战常见错误与防坑指南

在实际编写 for 循环时,有三个最容易发生逻辑缺陷甚至运行时崩溃的陷阱需要特别警惕:

⚠️ 陷阱一:在遍历过程中直接修改原容器长度

在遍历列表时直接调用 remove() 或 del,会导致底层索引偏移,造成元素“漏检跳过”;而在遍历字典时直接调用 pop() 或添加新键,Python 解释器会直接抛出严重异常:RuntimeError: dictionary changed size during iteration。

安全解法:遍历原容器的浅拷贝切片 for item in my_list[:]:,或者遍历字典键的列表镜像 for k in list(my_dict.keys()):;更优雅的方式是使用列表推导式构建新对象。

⚠️ 陷阱二:变量解包数量不一致

当遍历包含元组或列表的嵌套序列时,左侧声明的变量数量必须与单次迭代产出的元素个数严格一致。若元素只包含一个值却写了两个变量,会报错 ValueError: not enough values to unpack;反之则报错 ValueError: too many values to unpack。

⚠️ 陷阱三:循环变量的作用域泄露

与 C/Java 等块级作用域语言不同,Python 中的 for 循环变量在循环结束后不会被销毁,其仍保留在当前函数或全局作用域中,并维持最后一次迭代的值。如果循环后继续使用同名变量,可能会引发意料之外的逻辑覆盖。

六、遍历语法全景决策与最佳实践总结

为了在开发中迅速选择最合适的遍历模式,下表总结了列表、字符串与字典各遍历写法的特性与典型场景:

Python for循环基础语法:遍历列表、字典与字符串
图4汇总了Python主要容器在for循环下的语法方案、返回值类型与避坑决策矩阵

掌握 Python for 循环的关键,在于理解“按元素迭代”的哲学:针对列表,优先直取元素,需索引时搭配 enumerate();针对字符串,直接逐字符展开;针对字典,根据需求选用直接遍历(键)、.values()(值)或 .items()(键值对)。养成避免在循环体中就地改变容器尺寸的习惯,就能写出高效、优雅且不易出错的 Pythonic 代码。

相关专题:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。