如何高效生成嵌套列表元素的唯一组合列表?
高效生成嵌套列表元素的笛卡尔积组合
你要实现的是多个子列表元素的笛卡尔积,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']]
关键建议
- 内存优化:如果处理的嵌套列表规模较大,不要直接转成
list,可以直接遍历itertools.product返回的迭代器,避免一次性占用过多内存。 - 去重处理:如果原嵌套列表的子元素存在重复值,需先对每个子列表去重再生成组合。要保持原顺序去重的话,可以用这个方法:
# 对每个子列表去重并保留原顺序 deduped_attributes = [list(dict.fromkeys(sub)) for sub in attributes] paths = [list(item) for item in itertools.product(*deduped_attributes)] - 空列表兼容:如果某个子列表为空,
itertools.product会返回空结果,符合逻辑——空元素无法生成有效组合。如果需要特殊处理空列表场景,可以提前过滤空的子列表,或者给空列表设置默认值。
内容的提问来源于stack exchange,提问作者Wadhah Sky
相关产品推荐
相关产品推荐

