难以从 python 中的列表中删除 class 个实例

Having difficulties to delete class instances from a list in python

我看到过类似的问题OOP python - removing class instance from a list,但解决方案对我不起作用。

我进行了完整的 class 测试。结果就是没过关

我正在使用 python 3.4.4

import random

一个简单的class

class J():
    def __init__(self):
        self.jota = 0

    def up_j(self):
        self.jota = random.choice([2, 0])

    def get_j(self):
        return self.jota

    def __str__(self):
        return str(self.jota)

一个列表,我可以在其中附加 class

的实例
a = []

追加 class 个实例

for i in range(20):
    a.append(J())

稍微改变一下

for e in a:
    e.up_j()

这是我想要正确的函数

def x(a):
    for i, o in enumerate(a):
        if o.get_j() == 0:
           del a[i]
    return a

应用函数

a = x(a)

测试中!请注意,结果中的所有数字都应为零。 但事实并非如此

for each in a:
    print(each)

结果!

2
2
0
0
...

您正在迭代时从列表中删除值。这几乎永远行不通。不要在迭代时从列表中删除值,而是创建一个新列表并附加您关心的值(即您不会删除):

def x(a):
    ret = []
    for i, o in enumerate(a):
        if o.get_j() != 0:
           ret.append(o)
    return ret