2015-08-12 2 views
0

Я создал список экземпляров (с циклом 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>] 

Почему это ведет себя странно?

ответ

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

Почему бы не использовать этот простой способ удалить ваш to_delete sublist из примера.list

map(example.list.remove, to_delete)

Смежные вопросы