python - 有没有办法按值删除列表中的对象?
问题描述
“list.remove”函数不按值比较对象
假设代码是:
class item:
def __init__(self, a, b):
self.feild1 = a
self.field2 = b
a = item(1,4)
b = item(1,4)
l = [a]
l.remove(b) # doesn't remove l[0]
解决方案
因为您不提供__eq__
实现,所以您的类从object
. object.__eq__
不比较属性的值,它只是检查以查看id(a) == id(b)
. 您需要编写自己的__eq__
:
class item:
def __init__(self, a, b):
self.field1 = a
self.field2 = b
def __eq__(self, other):
if not isinstance(other, item):
return NotImplemented
return self.field1 == other.field1 and self.field2 == other.field2
a = item(1,4)
b = item(1,4)
l = [a]
l.remove(b)
print(l)
# []
推荐阅读
- bazel - 从 Bazel 中的目标/提供者列表中提取/收集文件的最有效方法是什么?
- javascript - 使用 video.js 我试图使用变量而不是文本来提供视频源 url 和海报 url(以及最终的字幕(轨道)元素
- node.js - 如何判断请求是来自浏览器还是浏览器扩展
- php - where equals SQL 忽略空格
- go - 自定义结构的 UnmarshalYAML 接口的实现
- ios - 我应该为我的应用程序中的每个表创建一个 UITableViewCell 类吗?
- javascript - 如何使用 gatsby-plugin-gdpr-cookies 设置 Gatsby Cookie 同意横幅
- python - 当条件似乎满足时,为什么 geopandas 会抛出断言错误?
- python - Netmiko 登录失败处理
- python - 如何使用 spark 和 python 访问镶木地板表中单元格内的嵌套数组?