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

TypeError: 'int' object is not subscriptable报错求助:二维列表统计问题

解决 "TypeError: 'int' object is not subscriptable" 问题

这个错误我太熟了!TypeError: 'int' object is not subscriptable本质上就是你试图把一个整数当成列表/字典这种可以用[]下标访问的对象来操作了,咱们一步步来拆解问题、解决它:

错误原因分析

你要遍历二维列表统计指定列的频次,核心操作肯定是row[column]——取出某一行的指定列元素。但报错说明,当你执行类似x[y]的操作时,x是一个整数,而不是可下标的序列(比如列表、元组)。常见的触发场景有这几种:

  • 二维列表data里混进了非列表元素:比如某一行不是子列表,而是单个整数(比如data = [[1,2], 3, [4,5]],第二行就是int类型)
  • 遍历逻辑出错:你可能遍历到了行里的单个元素,而不是行本身(比如误写for row in data[0],此时row是行内的int元素)
  • 列索引处理失误:比如不小心把column(int类型)当成了可下标的对象,写成了row[column[0]]

正确的实现示例

我给你写一个健壮性较强的实现,同时加入了错误检查,避免踩坑:

def count_column_frequency(data, column):
    frequency_dict = {}
    for row in data:
        # 先检查当前行是否是可下标的序列(列表/元组)
        if not isinstance(row, (list, tuple)):
            print(f"⚠️  跳过无效行:当前行不是列表/元组,而是 {type(row)} 类型的 {row}")
            continue
        # 检查列索引是否在当前行的有效范围内
        if column < 0 or column >= len(row):
            print(f"⚠️  跳过行 {row}:列索引 {column} 超出该行的长度范围")
            continue
        # 取出指定列的值并更新统计字典
        value = row[column]
        frequency_dict[value] = frequency_dict.get(value, 0) + 1
    return frequency_dict

# 测试用例
sample_data = [
    ["张三", 1995, "北京"],
    ["李四", 1995, "上海"],
    ["王五", 1996, "北京"],
    ["赵六", 1995, "北京"]
]
# 统计第1列(出生年份)的频次
print(count_column_frequency(sample_data, 1))  # 输出 {1995: 3, 1996: 1}

排查问题的步骤

如果你用自己的代码还报错,可以按这几步排查:

  • 先打印data的结构:确认每一个元素都是子列表/元组,没有单个整数或其他非序列元素
  • 打印遍历的每一个row:看看是不是拿到了预期的行数据,还是不小心拿到了行内的单个元素
  • 检查column的值:确认它是一个合法的非负整数,且没有对它进行下标操作(比如不要写column[0])

内容的提问来源于stack exchange,提问作者Tatár Tamás

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:26:51