Python实现列表索引匹配排序:元素对应索引,缺失补-1
问题分析与修正方案
需求明确
生成一个与原列表长度一致的新列表,规则如下:
- 新列表的每个索引
i(范围0到原列表长度-1),若原列表中存在数值等于i的非-1元素,则新列表该位置赋值为i - 若不存在符合条件的元素,该位置保留为
-1
原代码问题点
- 空列表直接索引赋值报错:
MyArrayNew初始为空列表,直接执行MyArrayNew[n] = n会触发IndexError,因为空列表没有对应索引的位置 - 循环逻辑错误:遍历原数组元素时未过滤无效的
-1,也未正确关联新列表的索引关系 - 范围判断错误:
n <= len(MyArray)不符合索引规则,合法索引范围是0 <= n < len(MyArray)(索引从0开始,最大索引为长度减1)
修正后的实现代码
基础遍历版
MyArray = [-1, -1, 6, 1, 9, 3, 2, -1, 4, -1] # 初始化全为-1的新列表,长度与原数组一致 MyArrayNew = [-1] * len(MyArray) for num in MyArray: # 过滤无效元素,仅处理合法范围内的数值 if num != -1 and 0 <= num < len(MyArray): MyArrayNew[num] = num print(MyArrayNew) # 输出: [-1, 1, 2, 3, 4, -1, 6, -1, -1, 9]
集合优化版(适合大数据量场景)
用集合存储有效元素,通过列表推导式快速生成结果,逻辑更简洁:
MyArray = [-1, -1, 6, 1, 9, 3, 2, -1, 4, -1] # 提取原数组中所有合法的目标值 valid_nums = {num for num in MyArray if num != -1 and 0 <= num < len(MyArray)} # 遍历每个索引,判断是否在有效集合中 MyArrayNew = [i if i in valid_nums else -1 for i in range(len(MyArray))] print(MyArrayNew) # 输出: [-1, 1, 2, 3, 4, -1, 6, -1, -1, 9]
内容的提问来源于stack exchange,提问作者DatSoup
相关产品推荐
相关产品推荐

