如何从 Python 对象列表中查找和删除对象

how to find and remove object form a list of python object

提问人:Black Swan 提问时间:2/10/2021 最后编辑:RedBlack Swan 更新时间:2/10/2021 访问量:126

问:

我是 Python 的新手。我是一名java程序员。我有一个类的对象列表。我的目的是从列表中查找并删除一个对象。

class commit:
    def __init__(self, id, message):
        self.id = id
        self.message = message

我试图查找和删除的代码:

elif command.startswith("git delete"):
        split = command.split();
        deleteID = split[2]; // the id which will be deleted.
        print('deleteID:' + deleteID)
        d1 = {};
        for obj in listCommit:
            print(obj.id)
            if obj.id == deleteID:
                print(obj)
                listCommit.remove(obj);
                d1 = obj;
        # listCommit.remove(d1);    

我发现这是行不通的。if obj.id == deleteID:

listCommit.remove(d1);此行显示对象未退出的错误。

所以我的问题是:如何从列表中查找和删除对象?

这种检查是假的,而它应该是真的。if obj.id == deleteID:

python if-statement 调试 布尔 相等

评论

0赞 Joonyoung Park 2/10/2021
和是同一类型吗?obj.iddeleteID
0赞 smci 2/10/2021
这就像 Java 代码机械地翻译成 Python 一样;你的类不是必需的,它只是 (id,message) 元组的包装器。您可以使用列表推导式来删除特定 id:commit[(id,msg) for id,msg in commits if msg!= delete_id]

答:

0赞 Nicolas Busca 2/10/2021 #1

您可以捕获值不在列表中时引发的异常:

try:
    listCommit.remove(d1)
except ValueError:
    pass

下面是删除 API:

1赞 Red 2/10/2021 #2

原因是因为变量是 类型 ,而变量是类型 , 像这样的东西永远不会出现在 Python 中。commit.idintdeleteIDstr"5" == 5True

只需更换生产线

deleteID = split[2]

deleteID = int(split[2])

转换数据类型以与变量兼容。commit.id