Python遍历列表、字符串和字典的for循环写法示例
假设你正在编写一段脚本,需要批量格式化用户输入的商品清单、检查用户账号字符串中的非法符号,或者统计配置文件里各项参数的值。在 Python 中,for...in 循环是处理这三类任务的核心工具。虽然语法结构统一,但列表、字符串和字典在内存组织与迭代协议上各有侧重:列表是有序元素集合、字符串是不可变字符序列、字典则是基于哈希表的键值映射。本文通过具体代码示例,分门别类讲解这三种基础容器的标准遍历写法、索引获取方式以及实际开发中常见的边界问题。
一、遍历列表(List)的 for 循环写法
列表是 Python 中最常用的有序序列。遍历列表主要有两种需求:一种是只需要读取元素值,另一种是需要同步获取元素在列表中的索引位置。
1. 直接按元素值遍历
当你只需要顺序处理列表中的每一个元素时,直接将迭代变量置于 in 之后即可,代码最为精简清晰:
# 示例:直接获取每个元素
fruits = ["苹果", "香蕉", "橙子", "草莓"]
for fruit in fruits:
print(f"当前水果: {fruit}")
在每次循环中,变量 fruit 会按顺序绑定到列表中的下一个对象,直到遍历完整个列表。
2. 使用 enumerate() 同步获取索引与元素
如果业务逻辑需要知道当前处理到第几个元素(例如展示编号或进行位置校验),不建议使用传统下标索引计数(如 for i in range(len(fruits))),而推荐使用内置函数 enumerate():
# 示例:同时获取索引与元素,并指定起始序号
fruits = ["苹果", "香蕉", "橙子", "草莓"]
for index, fruit in enumerate(fruits, start=1):
print(f"第 {index} 个元素是: {fruit}")
enumerate() 会在每次迭代时生成一个包含 (索引, 元素) 的元组,配合元组解包语法直接赋值给 index 和 fruit,可读性极高。
remove() 或 del 删除正在遍历的元素。在迭代过程中修改原列表长度会导致迭代器内部指针错位,从而漏掉部分元素。若需过滤列表,推荐使用列表推导式 [x for x in fruits if condition] 或遍历列表副本 for item in fruits.copy():。
二、遍历字符串(String)的 for 循环写法
在 Python 中,字符串是字符的不可变有序序列。对字符串使用 for 循环时,每次循环迭代的是单个长度为 1 的字符(Unicode 码点)。
1. 逐字符处理与条件判断
最基本的字符串遍历常用于字符统计、符号校验或数据清洗:
# 示例:遍历字符串并过滤数字字符
raw_message = "Order#9527; Total: 180 USD"
digit_chars = []
for char in raw_message:
if char.isdigit():
digit_chars.append(char)
order_number = "".join(digit_chars)
print(f"提取的连续数字: {order_number}") # 输出: 9527180
2. 配合切片进行倒序或步长遍历
如果需要倒序扫描字符或按特定步长抽样,可以结合 Python 的切片机制 [::-1] 配合 for 循环使用:
# 示例:倒序遍历与跳步遍历
word = "PYTHON"
# 倒序输出: N O H T Y P
for char in word[::-1]:
print(char, end=" ")
print()
# 每隔一个字符读取: P T O
for char in word[::2]:
print(char, end=" ")
print()
三、遍历字典(Dictionary)的 for 循环写法
字典是基于键值对(Key-Value)的哈希映射容器。在遍历字典时,Python 提供了三种不同维度的视图方法:仅键、仅值、键值成对。
1. 默认遍历:遍历所有键(Keys)
直接对字典对象执行 for k in dict_obj 时,Python 默认遍历的是所有的键:
# 示例:默认遍历键
user_profile = {"username": "alex", "role": "admin", "status": "active"}
for key in user_profile:
print(f"键: {key} -> 值: {user_profile[key]}")
显式调用 user_profile.keys() 与上述默认方式效果完全一致。虽然可以通过 user_profile[key] 取出值,但如果本身就需要同时使用键和值,频繁哈希寻址不是最优写法。
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) 元组,并通过双变量解包接收:
# 示例:解包键与值
config = {"host": "127.0.0.1", "port": 8080, "timeout": 30}
for key, value in config.items():
print(f"配置项 {key} = {value}")
del user[k] 或 user["new_key"] = val),解释器会抛出 RuntimeError: dictionary changed size during iteration。如需在循环中剔除某些键,应提前固定键列表:for key in list(user.keys()): 或通过字典推导式生成新字典。
四、三种容器遍历特征对照与决策总结
为了在实际编码中快速选择最合理的遍历语法,以下将列表、字符串和字典的迭代特征与典型写法归纳如下:
| 容器类型 | 元素特性 | 基础遍历写法 | 索引/键值增强写法 | 修改容器时的安全策略 |
|---|---|---|---|---|
| 列表 (List) | 有序、可变、允许重复 | for item in my_list: |
for i, item in enumerate(my_list): |
不能直接边遍历边 remove;应遍历副本或用推导式 |
| 字符串 (String) | 有序、不可变单字符 | for char in my_str: |
for i, char in enumerate(my_str): |
字符不可原地修改;通过列表收集后使用 join 组合 |
| 字典 (Dict) | 键唯一、键值映射、无序/保序 | for key in my_dict: |
for k, v in my_dict.items(): |
禁止直接增删键;应使用 list(my_dict.keys()) 锁定键视图 |
掌握这三种容器在 for 循环中的标准写法,不仅能写出更加 Pythonic、符合 PEP 8 规范的代码,更能从根源上规避迭代过程中的并发修改异常与性能开销。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













