修复Python报错:tuple indices must be integers or slices, not list
错误原因
你的代码一共有3处逻辑问题,最终触发了你看到的TypeError:
- 切片赋值语法错误
你在循环里写的l = fsa[x:x+6], [x]、m = ghf[x:x+6], [x]用逗号分隔了两个值,Python会自动把这两个值打包成二元元组:元组第一个元素是你切出来的长度为6的子列表,第二个元素是包裹了当前循环索引x的单元素列表,这完全不是你想要的“切分后的子列表”结构。 - 变量覆盖导致数据丢失
你没有提前定义容器存储每一轮切出来的子列表,每轮循环都直接给l、m重新赋值,循环结束后m里只保留了最后一轮循环生成的那个二元元组,之前所有切分的结果全被覆盖了。 - 遍历逻辑错误
写for x in m时,循环变量x拿到的是m元组里的元素本身,不是元素的下标:第一次循环x是最后一段ghf子列表(列表类型),第二次循环x是存着最后一个起始索引的单元素列表。你把这个列表类型的x当索引去写m[x],而列表/元组的索引只支持整数或切片,因此直接抛出tuple indices must be integers or slices, not list的错误。
就算你前面的切分逻辑写对了,用m[x+5]取最后一个元素也有隐患:如果两个列表的总长度不是6的整数倍,最后一段子列表长度不足6,写死+5会触发索引越界。
修复后可运行代码
# 初始化空列表存储切分后的所有子列表 fsa_chunks = [] ghf_chunks = [] list_length = len(fsa) # 以6为步长切分两个列表 for idx in range(0, list_length, 6): # 直接切片后追加到对应存储列表,不要加多余的逗号和[x] fsa_chunks.append(fsa[idx:idx+6]) ghf_chunks.append(ghf[idx:idx+6]) # 遍历ghf的所有切分子列表,提取首尾元素打印 for sub in ghf_chunks: first = sub[0] last = sub[-1] # 用-1索引取最后一个元素,兼容最后一段长度不足6的场景 print(first, last)
关键修复点
- 删除了切片赋值语句里多余的
, [x],避免意外生成元组 - 提前初始化两个空列表作为容器,每轮切分后把子列表追加进去,解决循环覆盖变量的问题
- 遍历子列表时直接拿到每个子列表对象,不需要额外通过索引取值
- 用
[-1]取子列表最后一个元素,避免最后一段长度不足6时出现索引越界
内容的提问来源于stack exchange,提问作者user19386382
相关产品推荐
相关产品推荐

