在Python实际开发中,我们常常需要先遍历数据得到一些中间值,再拿着这些中间值做进一步运算。如果写成两个分开的循环,不仅多一次遍历,代码也不够直观。下面介绍几种把两个循环合并、基于前一个循环结果连续计算的方法。

为什么需要合并循环
假设有一组数字,第一步要算出每个数字的平方,第二步要把平方值再乘以二。分开写就是先算平方存起来,再遍历平方值计算。合并后可以在同一次遍历里完成,减少临时存储和遍历次数。
方法一:在单个循环中连续计算
最直接的方式是在一个for循环体内,先算出前一步结果,立刻用这个结果做后一步计算。
nums = [1, 2, 3, 4, 5]
results = []
for n in nums:
square = n * n # 前一个循环的计算结果
doubled = square * 2 # 基于前一个结果连续计算
results.append(doubled)
print(results)
方法二:使用列表推导式合并
如果逻辑不复杂,可以用列表推导式把两步压缩到一行,语义清晰且效率不错。
nums = [1, 2, 3, 4, 5] results = [(n * n) * 2 for n in nums] print(results)
方法三:用生成器串联前后逻辑
当数据量大、不想一次性占用内存时,可以写两个生成器,第二个生成器接收第一个的输出,调用时仍是连续执行。
def step_one(data):
for n in data:
yield n * n
def step_two(squares):
for s in squares:
yield s * 2
nums = [1, 2, 3, 4, 5]
results = list(step_two(step_one(nums)))
print(results)
方法对比
| 方式 | 适用场景 | 可读性 |
|---|---|---|
| 单循环内连续算 | 逻辑稍多、需中间变量 | 好 |
| 列表推导式 | 简单转换 | 较好 |
| 生成器串联 | 大数据、惰性计算 | 一般 |
小结
把两个循环合并的核心思路是:让前一步的结果在当前迭代中直接流入后一步。根据数据规模和逻辑复杂度,选择普通循环、推导式或生成器即可,既提升性能也让代码更紧凑。