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

使用Python itertools生成可变列表集合的全组合方案问询

生成多列表元素的所有组合(笛卡尔积)

嘿,你说的这个需求其实就是求笛卡尔积,Python里的itertools.product完全是为这个场景设计的,用它来实现超省心!当然,要是你不想依赖标准库,手动实现的方法也有几种,我给你一一说明:

方法一:用itertools.product(最推荐)

itertools.product会直接返回所有输入可迭代对象的笛卡尔积,不管你有多少个列表,传进去就行。如果需要列表形式的结果,转一下就好:

import itertools

# 示例列表
list1 = ['a', 'b', 'c']
list2 = ['d', 'e', 'f']
list3 = ['g', 'h', 'i']

# 生成所有组合(默认是元组形式)
all_combinations = list(itertools.product(list1, list2, list3))

# 转成你要的列表形式
all_combinations_as_lists = [list(comb) for comb in all_combinations]

print(all_combinations_as_lists)

如果你的列表是放在一个大列表里(比如all_lists = [list1, list2, list3]),可以用解包操作符*简化:itertools.product(*all_lists),非常灵活。

方法二:手动递归实现(不用标准库)

要是不想用itertools,递归的方式也能搞定。核心思路是逐步合并列表:每次取第一个列表的元素,和剩下所有列表的组合拼接起来:

def cartesian_product(lists):
    # 基线条件:只剩一个列表时,每个元素单独成列表
    if len(lists) == 1:
        return [[item] for item in lists[0]]
    # 递归处理:拿第一个列表的元素,拼接后面列表的笛卡尔积
    result = []
    for item in lists[0]:
        for sub_comb in cartesian_product(lists[1:]):
            result.append([item] + sub_comb)
    return result

# 测试示例
list1 = ['a', 'b', 'c']
list2 = ['d', 'e', 'f']
list3 = ['g', 'h', 'i']
all_combinations = cartesian_product([list1, list2, list3])
print(all_combinations)

这个函数支持任意数量的输入列表,输出直接就是你要的列表嵌套格式。

方法三:迭代式列表推导(逐步构建)

还有一种更简洁的迭代写法,从空列表开始,每次把当前的组合和下一个列表的元素拼接,逐步生成所有组合:

def cartesian_product_iter(lists):
    result = [[]]
    for lst in lists:
        # 把现有组合和当前列表的每个元素拼接
        result = [prev + [item] for prev in result for item in lst]
    return result

# 测试
list1 = ['a', 'b', 'c']
list2 = ['d', 'e', 'f']
list3 = ['g', 'h', 'i']
print(cartesian_product_iter([list1, list2, list3]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:30:31