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
相关产品推荐
相关产品推荐

