Python报错list indices must be integers or slices not tuple的排查与处理
问题分析与解决方案
首先来看你遇到的list indices must be integers or slices not tuple错误,核心原因是这行代码:
clist[str(a), j[0:5], j[9]]
你这里试图用元组(str(a), j[0:5], j[9])作为列表clist的索引,但列表只能接受整数或切片作为索引,这才触发了报错。你真正想做的应该是把这个组合后的数据添加到clist里,所以需要用list.append()方法。
除此之外,你的代码还有几个其他问题,我一起帮你修正:
错误点汇总
- 文件名拼写错误:
'dataset,csv'里的逗号应该是点,改为'dataset.csv' - 循环变量冲突:外层循环用了
i,内层又重复用i,会覆盖外层变量导致循环逻辑异常 - 手动处理CSV的隐患:用
split(',')拆分CSV行,如果字段本身包含逗号(比如带引号的字段),会拆分错误,建议用内置csv模块 - 冗余的文件关闭:
with语句会自动管理文件关闭,不需要手动f.close()
修正后的代码(基于你的原逻辑优化)
clist = [] # 外层循环变量改成idx,避免和内层冲突 for idx in range(0, 17): a = idx * 50 # 修正文件名的逗号为点 file_path = f'Ptrain{a}dataset.csv' with open(file_path, 'r') as f: temp = f.readlines() temp2 = [] # 内层循环变量改成line,避免冲突 for line in temp: # 替换空引号后拆分 cleaned_line = line.replace('""', '') temp2.append(cleaned_line.split(',')) for j in temp2: # 用append添加组合后的数据,而不是索引访问 # 这里可以把第1-5列(j[0:5])合并成一个字符串,或者保留列表,根据你的需求调整 merged_cols = ' '.join(j[0:5]) # 用空格合并,也可以用其他分隔符 clist.append((str(a), merged_cols, j[9])) # 不需要手动close,with块结束自动关闭
更规范的写法(使用csv模块)
手动处理CSV容易踩坑,用Python内置的csv模块更稳定,尤其是处理带特殊字符的字段:
import csv clist = [] for idx in range(0, 17): a = idx * 50 file_path = f'Ptrain{a}dataset.csv' with open(file_path, 'r', newline='') as f: reader = csv.reader(f) # 跳过表头(如果你的CSV有表头的话,不需要就删掉这行) next(reader) for row in reader: # 合并第1-5列(索引0到4) merged_cols = ' '.join(row[0:5]) # 添加到综合列表 clist.append((str(a), merged_cols, row[9]))
这样修改后,既解决了索引错误的问题,也优化了代码的稳定性和可读性。
内容的提问来源于stack exchange,提问作者Kimmy
相关产品推荐
相关产品推荐

