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

不使用Itertools生成不定长列表数组全元素组合的方法

解决方案

首先纠正一个误解:itertools.product(*array_of_lists)本身是惰性迭代器,不会一次性将所有组合加载到内存中,只会在你迭代它(比如用for循环遍历)的时候逐个生成结果,所以正常情况下不会引发内存溢出。如果你只是需要逐个处理组合而不是一次性保存所有结果,直接用它就完全没问题,示例代码如下:

import itertools

array_of_lists = [[1,2], [3,4], [5,6]]
for combo in itertools.product(*array_of_lists):
    # 在这里处理单个组合,比如打印或业务计算
    print(combo)

如果因为某些原因你不想依赖itertools模块,可以自己实现一个递归生成器函数,同样是惰性生成组合,不占用过多内存:

def recursive_product(lists):
    if not lists:
        yield ()
        return
    first_list, rest_lists = lists[0], lists[1:]
    for item in first_list:
        for combo in recursive_product(rest_lists):
            yield (item,) + combo

# 使用示例
array_of_lists = [[1,2], [3,4], [5,6]]
for combo in recursive_product(array_of_lists):
    print(combo)

这个递归函数的核心逻辑:

  • 当传入的列表数组为空时,返回空元组(递归终止条件)
  • 取出第一个列表,遍历其中的每个元素
  • 递归处理剩余的列表数组,将当前元素与递归得到的每个组合拼接后返回

不管是itertools.product还是自定义的递归生成器,都能满足“无需保存所有迭代结果”且“列表个数无需预先定义”的需求。

内容的提问来源于stack exchange,提问作者Mjom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:05:22