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

时间:2016-06-14 23:34:33

标签: python list class instances del

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

我做了全班测试。结果是没有通过测试。

我正在使用python 3.4.4

import random

简单的课程

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)

我可以附加该类实例的列表

a = []

追加班级实例

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
...

1 个答案:

答案 0 :(得分:2)

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

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