Python 双嵌套列表索引替换后重编号算法实现方案咨询
嵌套列表索引重编号实现思路
整个逻辑可以拆解为4个核心步骤,全程用Python内置方法和itertools即可实现,无需复杂算法:
- 第一步:确定第一个列表的索引边界
用itertools.chain.from_iterable扁平化第一个嵌套列表,取最大值得到max_first,即为第一个列表的索引上限,重编号的起始值就是max_first + 1 - 第二步:提取第二个列表需要重编号的旧索引
扁平化第二个嵌套列表,筛选出所有大于max_first的元素,用集合去重后排序,得到需要映射的旧索引序列 - 第三步:生成新旧索引映射表
用字典推导式生成映射关系,排序后的旧索引按顺序依次对应从起始值开始的连续整数 - 第四步:遍历替换第二个列表的元素
遍历第二个嵌套列表的所有元素,属于旧索引的用映射表替换,属于第一个列表的索引直接保留即可
参考代码片段
from itertools import chain def renumber_second_list(first_nested, second_nested): # 计算第一个列表的最大索引 max_first = max(chain.from_iterable(first_nested)) # 提取所有需要重编号的旧索引 old_indices = sorted({ x for x in chain.from_iterable(second_nested) if x > max_first }) # 生成映射字典 start_num = max_first + 1 index_map = {old: start_num + idx for idx, old in enumerate(old_indices)} # 生成重编号后的第二个嵌套列表 return [ [index_map[item] if item in index_map else item for item in sub] for sub in second_nested ]
代入你给出的示例输入测试,输出结果和你提供的期望最终结果完全一致。
内容的提问来源于stack exchange,提问作者chiefenne
相关产品推荐
相关产品推荐

