如何通过给定索引列表将已重排的Python列表恢复为原始顺序
可以实现,核心是基于给定的index_list生成对应的逆置换索引,即可完成反向恢复。
原逻辑梳理
你提供的重排代码逻辑为:重排后列表的第j个元素,取自原始列表的第index_list[j]个元素,对应公式:result[j] = element[index_list[j]]
恢复实现代码
# 你的原始重排逻辑 element = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] index_list = [3,5,6,1,2,4,0] result = [element[i] for i in index_list] print(result) # 输出:['d', 'f', 'g', 'b', 'c', 'e', 'a'] # 仅用原index_list生成逆置换索引 inv_index = [0] * len(index_list) for pos, origin_idx in enumerate(index_list): inv_index[origin_idx] = pos # 用逆索引恢复原始列表 restored_element = [result[i] for i in inv_index] print(restored_element) # 输出:['a', 'b', 'c', 'd', 'e', 'f', 'g']
逻辑说明
逆置换索引inv_index的作用是标记原始列表的第k个元素,在重排后的result中所处的位置。遍历一次原index_list即可完成逆索引构建,时间复杂度为O(n),空间复杂度为O(n),是置换类操作的标准逆操作实现。
内容的提问来源于stack exchange,提问作者user14004788
相关产品推荐
相关产品推荐

