如果我有对象列表:
l = [a, b, c]
然后我删除其中一个对象:
l.remove(a)
如何确定列表中的哪个项目要删除(在引擎盖下)?
是否使用a
的内存位置? (您可以使用hex(id(a))
)
答案 0 :(得分:6)
它遍历列表,将每个项目与要删除的项目进行比较,如果找到匹配项,则只删除它。它适用于O(N)。资料来源:https://wiki.python.org/moin/TimeComplexity
它只删除第一个匹配的项目并立即返回。
如果要移除的项目不存在,则会失败并显示ValueError
这是listremove
函数,它从列表中删除项目,并使用PyObject_RichCompareBool
检查项目是否相同。 PyObject_RichCompareBool
就像这样实现了
/* Quick result when objects are the same.
Guarantees that identity implies equality. */
if (v == w) {
if (op == Py_EQ)
return 1;
else if (op == Py_NE)
return 0;
}
res = PyObject_RichCompare(v, w, op);
如果对象的标识相同(如果两个对象相同),则返回1
,否则比较值并返回结果。
答案 1 :(得分:3)
Python使用相等性测试==
。 remove
方法类似于以下函数:
def list_remove(a, el):
for i in range(len(a)):
if a[i] == el:
del a[i]
return
raise ValueError("item not found")
答案 2 :(得分:0)
如果列表中成员对象的类定义了__eq__()
方法或__cmp__()
方法,它将调用此方法进行比较。
如果不自定义比较方法,则类的非相同实例通常比较为不相等。它表示对象地址用于比较。