Python中如何生成多列表的展平子集组合
实现方法
你原有代码的逻辑已经正确生成了列表的组合,只需要对每个组合元组做展平拼接,就能得到单个列表形式的结果,不需要修改核心的组合生成逻辑。
写法1:直观列表拼接
不需要额外引入工具,直接遍历组合内的列表做元素追加即可:
import itertools D8 = [22, 27, 28, 30, 31, 40, 41, 42, 43, 45] D9 = [79, 80, 90, 92, 93, 97, 98, 104, 105, 109] D10 = [61, 64, 66, 70, 72, 76, 81, 86, 87] stuff = [D8, D9, D10] for subset_length in range(len(stuff) + 1): for subset in itertools.combinations(stuff, subset_length): merged_list = [] for item_list in subset: merged_list.extend(item_list) print(merged_list)
写法2:更简洁的itertools展平
用itertools.chain.from_iterable可以直接展平嵌套的可迭代对象,代码更精简:
import itertools D8 = [22, 27, 28, 30, 31, 40, 41, 42, 43, 45] D9 = [79, 80, 90, 92, 93, 97, 98, 104, 105, 109] D10 = [61, 64, 66, 70, 72, 76, 81, 86, 87] stuff = [D8, D9, D10] for subset_length in range(len(stuff) + 1): for subset in itertools.combinations(stuff, subset_length): merged_list = list(itertools.chain.from_iterable(subset)) print(merged_list)
输出说明
运行后会按组合长度从小到大输出所有展平后的列表:
- 长度为0的空组合输出
[] - 长度为1的组合分别输出D8、D9、D10三个原列表
- 长度为2的组合分别输出D8+D9、D8+D10、D9+D10三个拼接后的列表
- 长度为3的组合输出D8+D9+D10拼接后的完整列表
内容的提问来源于stack exchange,提问作者Kalpana
相关产品推荐
相关产品推荐

