如果我有对象列表:
l = [a, b, c]
然后我删除其中一个对象:
l.remove(a)
python如何确定要删除列表中的哪个项目(在引擎盖下)?
它是否使用 的内存位置a
?(您可以查看hex(id(a))
)
如果我有对象列表:
l = [a, b, c]
然后我删除其中一个对象:
l.remove(a)
python如何确定要删除列表中的哪个项目(在引擎盖下)?
它是否使用 的内存位置a
?(您可以查看hex(id(a))
)
它遍历列表,将每个项目与要删除的项目进行比较,如果找到匹配项,则将其删除。它在 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
否则比较值并返回结果。
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")
如果列表中成员对象的类定义了__eq__()
方法或__cmp__()
方法,则调用该方法进行比较。
如果不自定义比较方法,则类的不同实例通常比较为不相等。这意味着对象地址用于比较。