我创建了一个实例列表(带有for循环)。当我尝试从此列表中删除单个实例时,我收到一条错误消息,指出它们不在列表中。我做了一个简单的例子来说明我的问题:
makeObject
要删除的对象位于列表中。至少,当我打印出来时:
class example ():
list = []
def __init__ (self, name):
example.list.append(self)
self.name = name
for i in range(5):
name = ("example_" + str(i+1))
name = example(name)
to_delete = []
to_delete.append(example.list[2])
to_delete.append(example.list[0])
to_delete.append(example.list[4])
for j in to_delete:
example.list.remove(to_delete)
print(example.list)
为什么这种行为很奇怪?
答案 0 :(得分:4)
您正尝试从列表中删除整个列表to_delete
,而不是逐个删除每个项目。由于对象to_delete
本身不在列表中(尽管它包含的每个项目都是),它将引发错误。
此:
for j in to_delete:
example.list.remove(to_delete) #try to remove object to_delete
应该是:
for j in to_delete:
example.list.remove(j) #try to remove each object IN to_delete
此外,您只需使用list comprehension即可:
example.list = [x for x in example.list if x not in to_delete]
答案 1 :(得分:0)
为什么不使用这种简单的方法从example.list中删除你的to_delete子列表
map(example.list.remove, to_delete)