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

如何用Pythonic方式实现不同类别元素的全组合遍历

实现任意数量类别元素的全组合(Pythonic方式)

Python标准库中的itertools.product()就是专门解决这类任意多组元素笛卡尔积(全组合)问题的工具,完全符合Pythonic风格,无需自己造轮子。

基础用法示例

  • 两类元素的场景:
import itertools

cat_1 = [1, 2]
cat_2 = ['a', 'b']
# 直接传入多组可迭代对象,转换为列表即可得到结果
result = list(itertools.product(cat_1, cat_2))
print(result)  # 输出:[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
  • 三类元素的场景:
cat_3 = ['x', 'y']
result = list(itertools.product(cat_1, cat_2, cat_3))
print(result)  # 输出:[(1, 'a', 'x'), (1, 'a', 'y'), (1, 'b', 'x'), (1, 'b', 'y'), (2, 'a', 'x'), (2, 'a', 'y'), (2, 'b', 'x'), (2, 'b', 'y')]

封装为通用函数

如果需要一个可复用的函数,接收任意数量的类别参数,只需用可变参数*categories传递给itertools.product():

import itertools

def full_combinations(*categories):
    return list(itertools.product(*categories))

# 调用示例
print(full_combinations(cat_1, cat_2))
print(full_combinations(cat_1, cat_2, cat_3))

补充:手动实现思路(不推荐,仅作参考)

如果不想依赖标准库,可通过递归或functools.reduce实现,但效率和简洁性远不如itertools.product():

from functools import reduce

def full_combinations_manual(*categories):
    def combine(a, b):
        return [(x + (y,)) for x in a for y in b]
    # 初始化第一个类别为单个元素的元组列表,再依次与后续类别组合
    return reduce(combine, categories, [(x,) for x in categories[0]])

# 调用示例
print(full_combinations_manual(cat_1, cat_2))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:19