1

我看到了一个类似的问题OOP python - 从列表中删除类实例,但该解决方案对我不起作用。

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

我正在使用 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
...
4

1 回答 1

2

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

def x(a):
    ret = []
    for i, o in enumerate(a):
        if o.get_j() != 0:
           ret.append(o)
    return ret
于 2016-06-14T23:44:03.910 回答