You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现列表索引匹配排序:元素对应索引,缺失补-1

问题分析与修正方案

需求明确

生成一个与原列表长度一致的新列表,规则如下:

  • 新列表的每个索引i(范围0到原列表长度-1),若原列表中存在数值等于i的非-1元素,则新列表该位置赋值为i
  • 若不存在符合条件的元素,该位置保留为-1

原代码问题点

  1. 空列表直接索引赋值报错:MyArrayNew初始为空列表,直接执行MyArrayNew[n] = n会触发IndexError,因为空列表没有对应索引的位置
  2. 循环逻辑错误:遍历原数组元素时未过滤无效的-1,也未正确关联新列表的索引关系
  3. 范围判断错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:40:24