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

如何生成首元素从1到5的指定嵌套列表?itertools实现求助

问题描述

现有初始嵌套列表:

[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 0], [0, 1, 1], [0, 1, 2], [0, 2, 0], [0, 2, 1], [0, 2, 2]]

需要生成首元素从1到5的嵌套列表,格式示例:

# 首元素为1的列表
[[1, 0, 0], [1, 0, 1], [1, 0, 2], [1, 1, 0], [1, 1, 1], ..., [1, 2, 2]]
# 首元素为2的列表
[[2, 0, 0], [2, 0, 1], [2, 0, 2], [2, 1, 0], [2, 1, 1], ..., [2, 2, 2]]
...
# 直到首元素为5的列表

尝试用itertools实现但仅能生成首元素到2的列表,现有代码:

import itertools
first2 = list(map(list, itertools.product(list(range(3)), repeat = 3)))
解决方案

你需要拆分两个迭代维度:首元素的取值范围(1到5),以及子列表后两位的固定组合(0-2的笛卡尔积)。通过itertools.product配合循环即可实现需求,无需硬编码。

分块生成嵌套列表(按首元素分组)

import itertools

# 预先生成所有后两位的组合
suffix_combinations = list(itertools.product(range(3), repeat=2))

# 生成首元素1到5的分组列表
grouped_result = []
for first_num in range(1, 6):
    # 拼接首元素与每个后缀组合
    current_group = [[first_num] + list(suffix) for suffix in suffix_combinations]
    grouped_result.append(current_group)

# 验证输出
for idx, group in enumerate(grouped_result, 1):
    print(f"首元素为{idx}的列表:")
    print(group)

代码解释

  1. 后缀组合生成:itertools.product(range(3), repeat=2)会生成(0,0), (0,1), ..., (2,2)共9组二元组,对应原列表子列表的后两位。
  2. 首元素遍历:range(1,6)覆盖1到5的目标首元素。
  3. 子列表拼接:对每个首元素,将其与每个后缀组合拼接为三元列表,组成对应首元素的嵌套列表。

可选:生成扁平的所有子列表

如果不需要按首元素分组,而是要所有子列表的扁平集合,可以用itertools.chain简化:

import itertools

flat_result = list(itertools.chain.from_iterable(
    [[first] + list(suffix) for suffix in itertools.product(range(3), repeat=2)]
    for first in range(1, 6)
))

内容的提问来源于stack exchange,提问作者Dude Rar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:22:43