如何生成首元素从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)
代码解释
- 后缀组合生成:
itertools.product(range(3), repeat=2)会生成(0,0), (0,1), ..., (2,2)共9组二元组,对应原列表子列表的后两位。 - 首元素遍历:
range(1,6)覆盖1到5的目标首元素。 - 子列表拼接:对每个首元素,将其与每个后缀组合拼接为三元列表,组成对应首元素的嵌套列表。
可选:生成扁平的所有子列表
如果不需要按首元素分组,而是要所有子列表的扁平集合,可以用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
相关产品推荐
相关产品推荐

