Python for 循环处理列表元素
Python 的 for 循环会逐个遍历可迭代对象,因此搜索 “python for loop” 通常意味着“对每个元素重复这项工作”。 当你需要对列表或序列中的每个元素应用同一规则并收集结果(如总计、标记或汇总列表)时使用它。 它能让重复工作保持清晰,而无需手动管理索引。
Python For 循环示例:遍历元素
输出:
输出将显示在这里...
输出:
完成: 发货
完成: 给客户发邮件
示例解析
循环逐个处理元素,因此可以一致地应用同样的规则。
for task in tasks取出列表中的每个字符串。- 相同的打印动作会对每个元素执行。
- 输出证明循环为每个任务执行了一次。
常见错误
错误 1:以为 range 会包含结束值。
# 错误:期望 1 到 5
for day in range(1, 5):
print(day)
# 正确:Range 在结束值之前停止
for day in range(1, 6):
print(day)
这是因为 range 的结束值是排他的,因此不会产生结束值。
更多内容见 Python range 示例。
错误 2:在遍历时修改列表。
# 错误:删除元素会移动列表并可能跳过用户
for user in users:
if user["inactive"]:
users.remove(user)
# 正确:改为构建新列表
active_users = []
for user in users:
if not user["inactive"]:
active_users.append(user)
删除元素会在遍历时改变列表,因此某些元素可能不会被访问到。
错误 3:误解 for ... else。
# 错误:以为 Else 会在 Break 之后执行
for item in items:
if item["id"] == target_id:
break
else:
print("未找到元素")
# 正确:只有循环正常结束时 Else 才执行
for item in items:
if item["id"] == target_id:
print("找到元素")
break
else:
print("未找到元素")
else 块只会在循环正常结束时执行,因此 break 会跳过它。
for vs while:该用哪个
使用 for 当… | 使用 while 当… |
|---|---|
| 你有列表、range、文件或任何可迭代对象要处理。 | 你在等待某个条件变化(重试、轮询、用户输入)。 |
| 迭代次数由数据决定。 | 迭代次数事先不确定。 |
| 你想要清晰地遍历元素。 | 你需要手动控制何时停止。 |
经验法则:用 for 处理“对每个元素”的工作,用 while 处理“直到满足某条件”。
性能考虑
for 循环对元素的复杂度为 O(n)。range() 是惰性的,因此遍历很大的数值范围不会在内存中分配巨大的列表。如果你只需要第一个匹配项,可以尽早 break,或用 next/any 配合生成器来短路扫描,避免无意义的工作。
更多 Python for 循环模式
用 enumerate 添加位置标签。
tasks = ["发货", "给客户发邮件", "更新 CRM"]
for index, task in enumerate(tasks, start=1):
print(f"{index}. {task}")
当你需要元素及其位置时,用 enumerate 可以避免手写计数器。
相关内容:Python enumerate 示例。
用 .items() 汇总字典中的值。
region_sales = {"西部": 1200, "中部": 950, "东部": 1420}
for region, total in region_sales.items():
print(f"{region}: ${total}")
遍历 .items() 可以同时获得键和值,适合做报表汇总。
查找键/值的模式请见 Python dict 示例。
何时使用 Python for 循环
- 需要对每个订单、用户或文件行应用同样的规则。
- 希望对元素进行清晰、可读的遍历而不手动管理索引。
- 需要在迭代过程中收集结果(总计、问题列表)。
- 只需要一个匹配时避免使用;用
next、any或all进行短路。