python - 是否可以从对象列表中引用对象?
问题描述
我有以下形式的对象列表
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()
。
解决方案
假如说
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"]
推荐阅读
- python - Dash 引导组件未显示
- python - 如何通过迭代替换数据框列的某些值
- math - 我可以通过将两个数字都转换为基数 10,添加它们然后转换为所需的基数来添加不同基数吗?
- python - 基于 Django 类的 UpdateView 与多个上传文件的表单
- java - Spring Boot + Hibernate + Thymeleaf 延迟加载异常
- matlab - 我可以在 nD 矩阵上使用 mldivide “\” 而不在 MATLAB 中使用 for 循环吗?
- javascript - 打开多个网址的书签不起作用
- ios - UIActivityViewController - 没有共享选项 - Swift 5
- r - 嵌套 for 循环导致:[<-.data.frame`(`*tmp*` 替换有 x 行,数据有 y
- html - HTML5 下载属性