You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现无需全量存储结果的N层嵌套循环生成函数

解决方案

你可以将原函数改为生成器实现,无需预先生成全量结果列表,仅在迭代时动态生成每一组结果:

def multi_range(range_func, N, sofar=None):
    if sofar is None:
        sofar = []
    for a in range_func():
        current = sofar + [a]
        if N == 1:
            yield current
        else:
            yield from multi_range(range_func, N - 1, current)

测试代码

沿用你原有测试逻辑即可,输出结果和之前完全一致:

def test_range():
    yield 0
    yield 1

for b in multi_range(test_range, 3):
    print(b)

改动说明

  • 移除了用于存储全量结果的results参数,不再占用大量内存存储所有组合
  • 匹配到N=1的终止条件时,用yield返回当前组合而非追加到列表
  • 递归调用时通过yield from透传子层级生成的所有组合
  • 整体内存占用仅为O(N)(仅存储当前正在生成的组合路径以及递归栈,和总组合数无关)

更简洁的标准库方案

Python内置的itertools.product已经原生实现了该功能,性能更优且无需自行实现递归逻辑:

from itertools import product

def test_range():
    yield 0
    yield 1

# repeat参数对应循环层数N,返回结果为元组,按需转列表即可
for b in product(test_range(), repeat=3):
    print(list(b))

内容的提问来源于stack exchange,提问作者T. Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:54:03