【问题标题】:Having difficulties to delete class instances from a list in python [duplicate]难以从python列表中删除类实例[重复]
【发布时间】:2016-10-15 21:12:31
【问题描述】:

我看到了类似的问题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
...

【问题讨论】:

    标签: python list class instances del


    【解决方案1】:

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

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

    【讨论】:

    • 或者,ret = [o for o in a if o.get_j() != 0]ret = filter(lambda o: o.get_j() != 0, a)
    • 谢谢@tkausl。但我的清单是巨大的。是否可以使用相同的列表? a[:] 会起作用吗?
    • 如果您的列表很大,请使用filter 方法
    猜你喜欢
    • 2023-04-03
    • 2018-06-06
    • 2015-08-07
    • 2012-07-11
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多