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

Python如何生成12元素列表拆分为3个任意大小子列表的所有方案

实现方法

核心思路

  • 每个元素可以独立选择分配到3个子列表中的任意一个,总共有3**12 = 531441种分配方案,和你预期的总数一致
  • 用itertools.product生成所有元素的组编号序列,再根据序列把元素分到对应子列表即可

完整代码

import itertools

a = list(range(1, 13))

def generate_all_arrangements(items, group_count=3):
    # 生成每个元素的组编号所有组合
    for assign in itertools.product(range(group_count), repeat=len(items)):
        groups = [[] for _ in range(group_count)]
        for item, group_idx in zip(items, assign):
            groups[group_idx].append(item)
        yield groups

# 用法示例:遍历所有方案
all_arrangements = generate_all_arrangements(a)
for arrangement in all_arrangements:
    # 这里可以添加你的处理逻辑,比如打印或者存储
    print(arrangement)

说明

  • 子列表内部元素按照原列表a的顺序插入,符合你要求的「子列表内部顺序不影响唯一性」的要求,相同分组不会因为内部顺序生成重复结果
  • 按照你注释里标注的quarries, factories, markets三个不同类型的定义,三个组是有独立身份的,不需要额外去重,代码生成结果刚好覆盖所有3^12种组合;如果你认为三个子列表没有身份区别(比如[[1],[],[]]和[[],[1],[]]算同一种),可以在生成后对分组进行排序去重
  • 建议直接遍历生成器处理结果,不要把所有方案一次性存入列表,避免占用过多内存

内容的提问来源于stack exchange,提问作者James O'Neill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:05