Python for 循环处理列表元素

Python 的 for 循环会逐个遍历可迭代对象,因此搜索 “python for loop” 通常意味着“对每个元素重复这项工作”。 当你需要对列表或序列中的每个元素应用同一规则并收集结果(如总计、标记或汇总列表)时使用它。 它能让重复工作保持清晰,而无需手动管理索引。

Python For 循环示例:遍历元素

输出:

输出将显示在这里...

输出:

完成: 发货
完成: 给客户发邮件

示例解析

循环逐个处理元素,因此可以一致地应用同样的规则。

  1. for task in tasks 取出列表中的每个字符串。
  2. 相同的打印动作会对每个元素执行。
  3. 输出证明循环为每个任务执行了一次。

常见错误

错误 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 循环

  • 需要对每个订单、用户或文件行应用同样的规则。
  • 希望对元素进行清晰、可读的遍历而不手动管理索引。
  • 需要在迭代过程中收集结果(总计、问题列表)。
  • 只需要一个匹配时避免使用;用 nextanyall 进行短路。