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

Python中初始化的空列表为何非空?附索引越界报错排查

问题解答:列表未清空假象与索引越界的修复方案

让我一步步拆解你遇到的两个问题,帮你搞定这些bug:

一、先解决最棘手的「IndexError: list index out of range」

你这里完全搞反了列表的索引顺序!

  • 你的tableData是3个行列表(每个行有4个元素),所以items[j]才是第j行,items[j][i]是第j行第i列的元素
  • 但你写的是items[i][j]:外层循环i的范围是0-3(因为len(items[0])=4),而items总共只有3个行(索引0-2),当i=3时,items[3]根本不存在,直接触发索引越界。

简单说,把items[i][j]改成items[j][i]就能解决这个报错,但我们还要调整逻辑的位置。

二、为什么「初始化的空列表看起来不为空」?

其实counter_list确实是每次调用函数时都初始化为空了,但你的追加逻辑放错地方了:
你把counter_list.append(counter)放在了内层循环里,内层循环每跑一次(每一行)就追加一次长度值,而不是等整列的最长长度统计完再追加。所以才会出现列表不断变长的情况,看起来像是没被清空,但实际上是追加时机错误。

三、修复后的完整代码

def printTable(items):
    counter_list = []
    # 先确定总共有多少列(所有行的长度一致的前提下)
    num_columns = len(items[0])
    # 遍历每一列,统计该列的最长字符串
    for col_idx in range(num_columns):
        max_length = 0
        longest_str = ""
        # 遍历每一行,获取当前列的元素
        for row_idx in range(len(items)):
            current_str = items[row_idx][col_idx]
            current_len = len(current_str)
            # 更新最长长度和对应字符串
            if current_len > max_length:
                max_length = current_len
                longest_str = current_str
        # 整列统计完成后,再把最长长度加入列表
        counter_list.append(max_length)
        print(f'the longest string is: {longest_str}; and its length is {max_length}')
    print(f'Counter list: {counter_list}')

tableData = [
    ['apples','oranges','cherries','banana'],
    ['Alice','Bob','Carol','David'],
    ['dogs','cats','moose','goose']
]
printTable(tableData)

四、修复后的输出

the longest string is: apples; and its length is 6
the longest string is: oranges; and its length is 7
the longest string is: cherries; and its length is 8
the longest string is: banana; and its length is 6
Counter list: [6, 7, 8, 6]

额外小建议

  • 用f-string格式化字符串比直接拼接更清晰,也不容易出错
  • 给循环变量起有意义的名字(比如col_idx、row_idx),比i、j可读性强太多
  • 如果担心输入的行长度不一致,可以加个小检查:比如先确认所有行的长度相同,避免后续索引问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:07:57