首页 > 解决方案 > 是否可以从对象列表中引用对象?

问题描述

我有以下形式的对象列表

a = [<__main__.Card at 0x10b47a630>,
     <__main__.Card at 0x10b47aba8>,
     <__main__.Card at 0x10b47ac18>,
     <__main__.Card at 0x10b47a588>,
     <__main__.Card at 0x10b47a0f0>,
     <__main__.Card at 0x10b47a208>]

我可以从列表中调用单个对象;

print(a[0])印刷<__main__.Card at 0x10b47a630>

我想从列表中删除其中一个对象,但不使用索引,而是通过调用对象本身。

a.remove(<__main__.Card at 0x10b47a630>)  # I think that the format in the bracket is wrong

我知道我可以用字符串做到这一点:

a = ['a', 'b', 'c', 'z']

a.remove('c')

a = ['a', 'b', 'z']

但是,我还没有弄清楚在这种情况下如何做。

我知道我可以这样做:

a.remove(a[0])

但我不确定应该进入的对象的形式.remove()

标签: pythonlistobject

解决方案


假如说

a = [<__main__.Card at 0x10b47a630>,
     <__main__.Card at 0x10b47aba8>,
     <__main__.Card at 0x10b47ac18>,
     ...

是 的输出print a,则<__main__.Card at 0x10b47aba8>只是object 的默认字符串表示形式,而不是您可以用来在代码中引用该对象的任何内容。

如果您要删除的对象有一些参数可以区分它,那么您可以执行以下操作:

obj_to_remove = [obj for obj in a if obj.birthmark == "a mole"][0]
a.remove(obj_to_remove)

其中obj.birthmark是区别特征,"a mole"是标记要删除的对象的值。

或者,您可以使用上面的列表推导来删除对象而不使用remove

a = [obj for obj in a if obj.birthmark != "a mole"]

推荐阅读