如何在Python中从列表C生成指定格式的组合列表CM?
问题描述
给出列表C:
C = [9, 6, 10, 4, 8, 5, 7, 2, 3]
需要生成组合列表CM,格式要求如下:
CM=[[0,0,0,0,0,0,0,9,0], [0,0,0,0,6,0,0,9,0], [0,0,0,0,6,0,0,9,10], [0,0,4,0,6,0,0,9,10], [0,0,4,0,6,0,8,9,10], [0,0,4,5,6,0,8,9,10], [0,0,4,5,6,7,8,9,10], [2,0,4,5,6,7,8,9,10], [2,3,4,5,6,7,8,9,10]]
实现方案
规律分析
观察CM的生成逻辑:
- CM的每个子列表长度固定为9,初始全为0;
- 按原列表C的顺序,依次将元素填入固定目标索引,已填入的元素会保留在后续子列表中;
- 元素与目标索引的映射关系:
{2:0, 3:1, 4:2, 5:3, 6:4, 7:5, 8:6, 9:7, 10:8}(可从CM的最后一个子列表直接推导得出)
Python 代码实现
# 定义原列表 C = [9, 6, 10, 4, 8, 5, 7, 2, 3] # 元素到目标索引的映射 element_index_map = {2:0, 3:1, 4:2, 5:3, 6:4, 7:5, 8:6, 9:7, 10:8} # 初始化CM和当前列表 CM = [] current_list = [0]*9 # 遍历C中的每个元素,逐步构建CM for num in C: # 将当前元素放到对应索引位置 idx = element_index_map[num] current_list[idx] = num # 添加当前列表的副本到CM(避免后续修改影响已添加的子列表) CM.append(current_list.copy()) # 输出结果 print(CM)
代码说明
element_index_map:提前定义每个元素在子列表中的固定位置,确保填入位置准确;current_list.copy():每次添加列表副本,防止后续修改current_list时改变已存入CM的子列表;- 遍历顺序严格遵循原列表C的顺序,保证生成的CM与要求完全一致。
内容的提问来源于stack exchange,提问作者Chaymae Makri
相关产品推荐
相关产品推荐

