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

LeetCode 54.螺旋矩阵Python代码报错:IndexError: pop from empty list

问题分析与解决

空列表来源

你的代码报错是因为循环过程中未判断矩阵是否为空就执行pop(-1)操作。以测试用例[[1,2,3],[4,5,6],[7,8,9]]为例,第二次循环时:

  1. 第一步matrix.pop(0)取出最后一行[5],此时matrix变为空列表[]
  2. 后续直接执行matrix.pop(-1),尝试从空列表中弹出元素,触发IndexError

另外代码还有隐藏问题:用answer.append(matrix.pop(0))会把整个行列表加入结果,最终得到嵌套列表,不符合题目要求的扁平输出格式。

解决办法

需要在每一步操作前检查矩阵/行是否非空,同时将append改为extend来扁平化结果:

def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
    answer = []
    while matrix:
        # 取出顶部行
        answer.extend(matrix.pop(0))
        # 取出右侧列(每行最后一个元素)
        if matrix and matrix[0]:  # 矩阵非空且第一行非空
            for row in matrix:
                answer.append(row.pop())
        # 取出底部行(反转后加入,保证螺旋顺序)
        if matrix:
            answer.extend(matrix.pop()[::-1])
        # 取出左侧列(倒序遍历每行取第一个元素)
        if matrix and matrix[0]:
            for row in reversed(matrix):
                answer.append(row.pop(0))
    return answer

关键修改点:

  • 用extend替代append添加整行元素,保证结果是扁平列表
  • 每次执行pop操作前先判断matrix是否非空;操作列元素时,额外判断行是否非空,避免从空行弹出
  • 取出底部行时反转,确保符合螺旋从右到左的遍历顺序

测试用例验证

对于[[1,2,3],[4,5,6],[7,8,9]],执行流程:

  1. 取出顶部行[1,2,3],结果:[1,2,3],矩阵变为[[4,5,6],[7,8,9]]
  2. 取出右侧列6,9,结果:[1,2,3,6,9],矩阵变为[[4,5],[7,8]]
  3. 取出底部行并反转[8,7],结果:[1,2,3,6,9,8,7],矩阵变为[[4,5]]
  4. 取出左侧列4,结果:[1,2,3,6,9,8,7,4],矩阵变为[[5]]
  5. 下一轮循环取出顶部行[5],结果:[1,2,3,6,9,8,7,4,5],矩阵为空,循环结束

最终输出符合题目要求的螺旋顺序。

内容的提问来源于stack exchange,提问作者childoflogos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:50:23