list.remove
似乎工作正常:
>>> class Ball(object): pass
...
>>> balls = [ Ball() for _ in range(10) ]
>>> balls
[<__main__.Ball object at 0xe5350>, <__main__.Ball object at 0xe52b0>, <__main__.Ball object at 0xe5250>, <__main__.Ball object at 0xe5370>, <__main__.Ball object at 0xe5390>, <__main__.Ball object at 0xe53b0>, <__main__.Ball object at 0xe53d0>, <__main__.Ball object at 0xe5410>, <__main__.Ball object at 0xe5430>, <__main__.Ball object at 0xe5450>]
>>> balls.remove(balls[4])
>>> balls
[<__main__.Ball object at 0xe5350>, <__main__.Ball object at 0xe52b0>, <__main__.Ball object at 0xe5250>, <__main__.Ball object at 0xe5370>, <__main__.Ball object at 0xe53b0>, <__main__.Ball object at 0xe53d0>, <__main__.Ball object at 0xe5410>, <__main__.Ball object at 0xe5430>, <__main__.Ball object at 0xe5450>]
>>> len(balls)
9
真正的问题是您如何知道Ball
要删除哪个?
根据评论,您似乎希望移除所有反弹 N 次的球:
to_remove = [x for x in balls if x.times_bounced > N]
for x in to_remove:
balls.remove(x)
或者,如果您不需要就地执行此操作,您可以创建一个包含未反弹 N 次的球的新列表:
balls = [ x for x in balls if x.times_bounced <= N ]
最后,如果需要,您可以使用此惯用语和切片分配来完成整个工作:
balls[:] = [ x for x in balls if x.times_bounced <= N ]