正在搜索python列表中的空列表是否不准确?

时间:2011-10-13 14:29:38

标签: python list

为什么可以在some_list中找到b列表,即使它不在some_list中?

>>> a = []
>>> b = []
>>> a is b
False
>>> some_list = [0, 1, 2, 3, a]
>>> some_list.index(b)
4

4 个答案:

答案 0 :(得分:7)

.index返回第4个位置,因为它比较a和b,两个空列表。他们是平等的。如果你做a is b,它会比较对象的内存地址,它们是不同的,这就是这个表达式求值为False的原因。

In [1]: a = []
In [2]: b = []
In [3]: a == b
Out[3]: True

答案 1 :(得分:6)

Python的list.index搜索测试是否相等,而非标识。 ab不相同,但相同:

>>> a = []
>>> b = []
>>> a == b
True

如果您想要一个不同的相等定义,请在对象a,b上定义__eq__,例如:

def __eq__(self, other):
  return self is other
def __hash__(self):
  return 0 # Insert a more sensible, object-specific hash function here

答案 2 :(得分:1)

他们是不同的:

a is b
只有当它们都绑定到同一个对象时,

才为真。但是,index仅检查值是否相等。

举一个例子,3 == 3但是

int a = 3;
int b = 3;
&a == &b // this is false

答案 3 :(得分:1)

尝试执行a == b。 '=='运算符检查变量的值是否相同,索引函数也是如此。 is函数comap变量id()。

这可能会有所帮助:

>>> a = []
>>> b = []
>>> id(a)
4299650400
>>> id(b)
4299730096
>>> a == b
True
>>> a is b
False

还要注意这一个:

>>> some_list = [0, 1, 2, 3, a]
>>> some_list.index(b)
4
>>> some_list[4] == b
True
>>> some_list[4] is b
False