请教一个简单的列表问题


s=[[1,2,3],[0,1,2]]
for i in s:
    for j in range(3):
        if i[j]==j:
            s.remove(i)
            continue
print(s)

如上,将问题简化成这样,为何这样无法删除列表中的值?
以下是报错结果:
Traceback (most recent call last):
File "D:/code/review/test.py", line 5, in
s.remove(i)
ValueError: list.remove(x): x not in list

你题目的意思是不是删除值等于索引号的元素
经过remove后,列表的索引被改变了
内层的列表适合倒序索引来删除元素
另外s.remove(i)应该改为: i.remove(j)

s=[[1,2,3],[0,1,2]]
for i in s:
    for j in range(2,-1,-1):
        if i[j]==j:
            i.remove(j)
print(s)

输出结果: [[1, 2, 3], []]

同新手,我来回答你的问题吧。
问题在于 continue
当你完成删除后,continue会使循环直接继续执行循环,此时的i[j]中,j=1,原有的列表已经是删除过的,程序找不到目标所以才会报错。

你只需要把continue改成 break。就这么简单,求采纳。

s=[[1,2,3],[0,1,2]]
for i in s:
    for j in range(3):
        if i[j]==j:
            s.remove(i)
            break
print(s)

输出结果是[[1, 2, 3]]