Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从列表中删除未引用的对象_Python_List_Pygame - Fatal编程技术网

Python 从列表中删除未引用的对象

Python 从列表中删除未引用的对象,python,list,pygame,Python,List,Pygame,编辑:已解决。感谢大家的帮助,但问题似乎是列表被覆盖并转换成了一个精灵组,使得所有列表操作都变得无用 我最近开始用python编程(总是敲响警钟),所以如果我编写东西的方式有点吓人,我很抱歉。此特定程序导入pygame(正在使用的“引擎”) 我正在尝试创建一个包含对象/精灵的列表。我似乎已经做到了这一点,但是,一旦不再需要某个对象,我就无法从列表中删除该对象,因为据我所知,该对象没有特定的指针 sprite类的构造如下: class Point(pygame.sprite.Sprite):

编辑:已解决。感谢大家的帮助,但问题似乎是列表被覆盖并转换成了一个精灵组,使得所有列表操作都变得无用

我最近开始用python编程(总是敲响警钟),所以如果我编写东西的方式有点吓人,我很抱歉。此特定程序导入pygame(正在使用的“引擎”)

我正在尝试创建一个包含对象/精灵的列表。我似乎已经做到了这一点,但是,一旦不再需要某个对象,我就无法从列表中删除该对象,因为据我所知,该对象没有特定的指针

sprite类的构造如下:

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
类点数(pygame.sprite.sprite):
定义初始化(self,pos=(0,0)):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
#不重要代码
self.dead=False
打印自我
#这张照片;""
def更新(自我):
如果(自我死亡):
#sprList_点集。删除(?)
通过
创建对象和列表

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)>, ...]
sprList\u PointSet=[]
sprList_点集+=[点((50,90))]
sprList_PointSet+=[点((65110))]
# ...
打印SPRU点集列表
#这张照片;[, ...]

当不再需要某个实例时,是否有方法使用.remove(x)从列表中删除该实例,如果没有明显的内存指示器?如果没有/或/有人能推荐一种更好的方法吗。

self
指向要删除的对象,所以只需
删除(self)

remove
的定义和描述如下:

从列表中删除值为x的第一项。如果没有此类项目,则为错误


self
指向要删除的对象,因此只需
remove(self)

remove
的定义和描述如下:

从列表中删除值为x的第一项。如果没有此类项目,则为错误



当“重要”不再需要某个实例时,您可以使用它使其消失。

当“重要”不再需要某个实例时,您可以使用它使其消失。

您可以使用
lst.remove(self)
,但您需要类内列表的引用。@NiklasB。如果
sprList\u PointSet
是一个全局变量,只要他不尝试设置它,他就可以引用它。@agf:如果不是,设计会更好。你为什么还要保留这样的列表?它解决了什么问题,这些点是如何从其他地方(列表之外)移除的?lst.remove(self)不起作用,我先尝试了。列表在碰撞检查和精灵更新中起着几个重要作用,它是一个全局变量。您可以使用
lst.remove(self)
,但您需要在类中引用列表。@NiklasB。如果
sprList\u PointSet
是一个全局变量,只要他不尝试设置它,他就可以引用它。@agf:如果不是,设计会更好。你为什么还要保留这样的列表?它解决了什么问题,这些点是如何从其他地方(列表之外)移除的?lst.remove(self)不起作用,我先尝试了。该列表在碰撞检查和精灵更新中起着重要作用,它是一个全局变量。不幸的是,这是我第一次尝试的。它返回错误;“ValueError:list.remove(x):x不在列表中”@H3katonkheir然后对不在列表中的对象调用
update
。你需要处理这个错误。对象在列表中,当我“打印”列表时,它显示那里有东西,但没有显示任何好的引用。它表明;“每个对象。@H3katonkheir我没有PyGame,所以无法测试,但我不明白为什么它不起作用。@H3katonkheir:我认为你的特定对象不在其中。使用中的
操作符确保:
在lst中打印自我
。我打赌这是我第一次尝试的。它返回错误;“ValueError:list.remove(x):x不在列表中”@H3katonkheir然后对不在列表中的对象调用
update
。你需要处理这个错误。对象在列表中,当我“打印”列表时,它显示那里有东西,但没有显示任何好的引用。它表明;“每个对象。@H3katonkheir我没有PyGame,所以无法测试,但我不明白为什么它不起作用。@H3katonkheir:我认为你的特定对象不在其中。使用
中的
操作符确保:
在lst中打印自我
。我打赌这是错误的,我不明白为什么在这种特殊情况下有必要这样做。你能详细说明一下吗?是的,我认为在这种情况下,我们的想法是把它们从列表中删除,而不是让它们被垃圾收集——他仍然需要用
weakref
@agf>从列表中删除死引用。当然,但至少回调会知道哪些需要删除。我不明白为什么在这种情况下有必要这样做。你能详细说明一下吗?是的,我认为在这种情况下,我们的想法是将它们从列表中删除,而不是让它们被垃圾收集——他仍然需要使用
weakref
@agf:当然,但至少回调会知道哪些引用需要删除。
def update(self):
    if self.dead:
        try:
            sprList_PointSet.remove(self)
        except ValueError:
            pass