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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:45:44