You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套循环删除嵌套列表元素触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:00:27