从迭代创建的实例列表中删除实例列表
delete list of instance from iteratively created list of instances
我创建了一个实例列表(使用 for 循环)。当我尝试从此列表中删除单个实例时,我收到一条错误消息,指出它们不在列表中。我做了一个简单的例子来说明我的问题:
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)
要删除的对象在列表中。至少,当我打印出来时:
List of instances:
[<__main__.example object at 0x7fdc77082c50>, <__main__.example object at 0x7fdc77082be0>, <__main__.example object at 0x7fdc77082c88>, <__main__.example object at 0x7fdc77082b00>, <__main__.example object at 0x7fdc77082b38>]
Objects to remove:
[<__main__.example object at 0x7fdc77082c88>, <__main__.example object at 0x7fdc77082c50>, <__main__.example object at 0x7fdc77082b38>]
为什么这个行为很奇怪?
您正在尝试从列表中删除整个列表 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]
为什么不使用这种简单的方法从 example.list
中删除您的 to_delete 子列表
map(example.list.remove, to_delete)
我创建了一个实例列表(使用 for 循环)。当我尝试从此列表中删除单个实例时,我收到一条错误消息,指出它们不在列表中。我做了一个简单的例子来说明我的问题:
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)
要删除的对象在列表中。至少,当我打印出来时:
List of instances:
[<__main__.example object at 0x7fdc77082c50>, <__main__.example object at 0x7fdc77082be0>, <__main__.example object at 0x7fdc77082c88>, <__main__.example object at 0x7fdc77082b00>, <__main__.example object at 0x7fdc77082b38>]
Objects to remove:
[<__main__.example object at 0x7fdc77082c88>, <__main__.example object at 0x7fdc77082c50>, <__main__.example object at 0x7fdc77082b38>]
为什么这个行为很奇怪?
您正在尝试从列表中删除整个列表 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]
为什么不使用这种简单的方法从 example.list
中删除您的 to_delete 子列表 map(example.list.remove, to_delete)