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

如何高效生成嵌套列表元素的唯一组合列表?

高效生成嵌套列表元素的笛卡尔积组合

你要实现的是多个子列表元素的笛卡尔积,Python标准库的itertools.product是最高效的解决方案——它基于C底层实现,性能远优于纯Python手动嵌套循环。

核心实现代码

import itertools

attributes = [ ['nike', 'adidas', 'salmon'], ['38'], ['blue', 'grey'] ]
# 生成笛卡尔积,返回迭代器,转成列表后每个元素是元组
paths = list(itertools.product(*attributes))
# 如果需要子列表而非元组,再做一次转换
paths = [list(item) for item in itertools.product(*attributes)]

运行后得到的结果完全匹配需求:

[['nike', '38', 'blue'], ['nike', '38', 'grey'], ['adidas', '38', 'blue'], ['adidas', '38', 'grey'], ['salmon', '38', 'blue'], ['salmon', '38', 'grey']]

关键建议

  1. 内存优化:如果处理的嵌套列表规模较大,不要直接转成list,可以直接遍历itertools.product返回的迭代器,避免一次性占用过多内存。
  2. 去重处理:如果原嵌套列表的子元素存在重复值,需先对每个子列表去重再生成组合。要保持原顺序去重的话,可以用这个方法:
    # 对每个子列表去重并保留原顺序
    deduped_attributes = [list(dict.fromkeys(sub)) for sub in attributes]
    paths = [list(item) for item in itertools.product(*deduped_attributes)]
    
  3. 空列表兼容:如果某个子列表为空,itertools.product会返回空结果,符合逻辑——空元素无法生成有效组合。如果需要特殊处理空列表场景,可以提前过滤空的子列表,或者给空列表设置默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:05:14