Удаление не связанных объектов из списка - PullRequest
1 голос
/ 28 марта 2012

Редактировать : Решено.Спасибо за помощь, ребята, но похоже, что проблема заключалась в том, что список был перезаписан и преобразован в группу спрайтов, что сделало все манипуляции со списком бесполезными.

Я недавно начал программировать на python (всегда вызывает тревогуколокола), поэтому я прошу прощения, если способ, которым я закодировал вещи, немного страшен.Эта конкретная программа импортирует pygame (используется «движок»).

Я пытаюсь создать список, содержащий объекты / спрайты.Кажется, этого я достиг, однако у меня возникла проблема с удалением объекта из этого списка, когда он больше не нужен, поскольку, насколько я могу судить, у объекта нет определенного указателя.

Класс спрайта построен следующим образом:

class Point(pygame.sprite.Sprite):
    def __init__(self,pos=(0,0)):
        pygame.sprite.Sprite.__init__(self)

        #Unimportant code

        self.dead=False
        print self
        #This prints; "<Point sprite(in 0 groups)>"

    def update(self):
        if(self.dead):
            #sprList_PointSet.remove(?)
            pass

Объекты и список созданы;

sprList_PointSet=[]
sprList_PointSet+=[Point((50,90))]
sprList_PointSet+=[Point((65,110))]
# ...

print sprList_PointSet
#This prints; [<Point sprite(in 0 groups)>, <Point sprite(in 0 groups)>, ...]

Есть ли способ удалить экземпляр из списка, когда он больше не нужен, с помощью .remove (x) в случае, когда нет видимого индикатора памяти?Если нет / или / и кто-то может порекомендовать лучший способ сделать это.

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Вы можете использовать слабые ссылки , чтобы позволить экземпляру исчезнуть, когда это больше не нужно "важным".

2 голосов
/ 28 марта 2012

self указывает на объект, который вы хотите удалить, поэтому просто remove(self):

def update(self):
    if self.dead:
        try:
            sprList_PointSet.remove(self)
        except ValueError:
            pass

remove определено для изменяемых последовательностей и описано в руководстве :

Удалить первый элемент из списка, значение которого равно x. Это ошибка, если такого элемента нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...