难以从 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
我看到过类似的问题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