嵌套循环删除嵌套列表元素触发TypeError,该如何解决?
解决嵌套列表删除元素的TypeError问题
错误原因
你代码里的问题很明确:for i in student循环时,i是列表中的子列表(比如['Alice', 90]),而del student[i]试图用这个子列表作为索引——但列表的索引必须是整数或切片,因此触发了TypeError: list indices must be integers or slices, not list。
两种正确的删除方法
方法1:倒序遍历索引修改原列表
如果需要直接修改原列表,建议倒序遍历索引,这样删除元素后不会影响后续遍历的位置(正序删除会导致列表长度变化,后续元素前移,可能跳过某些项):
student = [['Alice', 90], ['Bob', 80], ['Chad', 70]] sname = input("Student Name?") # 从最后一个索引倒序遍历到第一个 for idx in range(len(student)-1, -1, -1): if student[idx][0] == sname: del student[idx]
方法2:用列表推导式生成新列表(推荐)
这是更简洁、更Pythonic的写法,直接筛选出不需要删除的元素生成新列表,完全避免遍历过程中修改原列表的问题:
student = [['Alice', 90], ['Bob', 80], ['Chad', 70]] sname = input("Student Name?") # 保留所有姓名不等于目标值的子列表 student = [item for item in student if item[0] != sname]
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

