Python 如何生成多个列表各取一个元素的所有组合?
Python跨多列表生成元素组合的实现方法
你之前用itertools.permutations、itertools.combinations出不来正确结果,本质是选的函数不对:这俩都是处理单个可迭代对象内部元素的——要么是生成全排列,要么是生成固定长度的不重复组合,根本不支持从多个独立列表里各拿一个元素做搭配的逻辑。
你需要的“从每个列表中各取1个元素、生成所有可能搭配”的效果,本质是数学上的笛卡尔积,直接使用itertools.product即可实现。
实现代码
from itertools import product list1 = [1, 2, 3] list2 = [5, 6] list3 = [7, 8, 9] # 传入所有待组合的列表,自动生成全搭配结果 all_combinations = [list(item) for item in product(list1, list2, list3)]
关键说明
product会按照传入列表的顺序逐一遍历元素,生成结果的顺序和你示例中预期的输出顺序完全匹配product迭代产出的元素是元组类型,通过列表推导将每个元组转为列表格式,就能得到完全符合要求的all_combinations结构- 如果后续需要参与组合的列表数量较多,可以把所有待组合列表存入一个总列表,通过解包语法传入参数,省去挨个写列表名的麻烦:
source_lists = [list1, list2, list3] all_combinations = [list(item) for item in product(*source_lists)]
内容的提问来源于stack exchange,提问作者Chana
相关产品推荐
相关产品推荐

