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]]