从迭代创建的实例列表中删除实例列表

时间:2015-08-12 15:09:24

标签: python list for-loop instances

我创建了一个实例列表(带有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)

为什么这种行为很奇怪?

2 个答案:

答案 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)