处理文本分类数据时遇Python嵌套列表错误:'int'对象不支持元素赋值
解决嵌套列表中的
TypeError: 'int' object does not support item assignment问题 嘿,这个错误我太熟了!你碰到的TypeError: 'int' object does not support item assignment本质上就是你试图给一个整数类型的对象做列表式的元素赋值——就像你想往一个数字里塞东西,这当然行不通啦。
结合你提到的文本分类场景(train_data是[[docID, wordID, count]]格式,train_label对应文档类别),大概率是你在构建TotalData这个嵌套列表时,初始化环节出了问题。我给你拆解一下常见原因和解决办法:
常见出错场景
最容易踩的坑是错误初始化嵌套列表。比如你可能写了这样的代码:
num_docs = len(train_label) TotalData = [0] * num_docs # 这里每个元素都是整数0!
之后当你想给TotalData[doc_id]赋值或者修改它的子元素时,比如:
TotalData[doc_id][0] = train_label[doc_id] # 报错!因为TotalData[doc_id]是int,不是列表
就会触发你看到的错误。
正确的解决步骤
1. 正确初始化嵌套列表
用列表推导式来创建每个元素都是空列表的嵌套结构,这样每个子列表都是独立的,支持后续的赋值和追加操作:
num_docs = len(train_label) TotalData = [[] for _ in range(num_docs)] # 每个元素都是空列表
2. 结合你的数据构建TotalData
根据你的需求,把train_label和train_data的内容整合进去,举个示例:
# 先给每个文档添加类别信息 for doc_idx, label in enumerate(train_label): TotalData[doc_idx].append(label) # 把类别放在子列表的第一个位置 # 再整合词频数据 for doc_id, word_id, count in train_data: # 注意docID要和train_label的索引对应,这里假设docID从0开始 TotalData[doc_id].append([word_id, count])
这样TotalData就会变成你需要的嵌套列表格式,不会再触发类型错误。
额外提醒
- 别用
[[]] * num_docs初始化,这种方式会让所有子列表指向同一个内存地址,修改一个子列表会导致所有子列表都跟着变。 - 操作前可以先打印
type(TotalData[doc_id]),确认你要操作的元素确实是列表类型,避免因为索引错误拿到了整数。
内容的提问来源于stack exchange,提问作者Shubham Agarwal
相关产品推荐
相关产品推荐

