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

Python二维网格随机出现索引越界问题求助

二维网格遍历的索引越界问题定位

问题背景

基于用户输入的行列数创建可变二维网格,但在遍历网格时,相同输入参数下有时正常运行,有时抛出list index out of range错误。

相关代码

创建网格的代码:

rows, cols = (rowSize, columnSize)  # creating 2d lists
grid = [[random.randint(10, 99) for i in range(cols)] for j in range(rows)]

遍历网格的代码:

for i in range(0, cols-1):
    for j in range(0, rows-1):
        if random.randint(0, 10) == 0:
            grid[i][j] = ''

问题原因

  1. 网格结构与索引不匹配:
    创建网格时,grid是行优先结构:外层循环range(rows)生成rows个行元素,每个行元素包含cols个列元素。因此grid的合法索引为grid[行索引][列索引],行索引范围是0 ~ rows-1,列索引范围是0 ~ cols-1。

  2. 遍历逻辑的索引错误:
    遍历代码中,外层循环i的范围是0 ~ cols-2,内层循环j的范围是0 ~ rows-2,却用grid[i][j]访问元素。当cols > rows时,i的取值会超出grid的行索引范围(比如rows=3、cols=5时,i可能取到3、4,而grid仅存在0、1、2三个行索引)。

  3. 随机性导致偶发错误:
    只有当random.randint(0,10) == 0时才会执行grid[i][j] = '',所以当i超出合法行索引且刚好触发该随机条件时,才会抛出索引越界错误;未触发随机条件时不会执行赋值操作,因此不会报错,这就造成了相同参数下时好时坏的现象。

修复方案

修正遍历逻辑的索引对应关系,确保行索引和列索引匹配网格结构:

# 遍历所有行和列(按需调整范围)
for j in range(rows):
    for i in range(cols):
        if random.randint(0, 10) == 0:
            grid[j][i] = ''

如果原本的遍历需求是忽略最后一行和最后一列,可调整为:

for j in range(rows - 1):
    for i in range(cols - 1):
        if random.randint(0, 10) == 0:
            grid[j][i] = ''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:50:24