我正在使用Python 2.7并且有一个有序的对象列表(在self.root.content中),我正在使用索引方法查询。但是,'index'返回的索引的值显然与我想要的对象的索引(在my_obj中保存)不匹配。 如果我'手动'循环遍历列表并查找我的对象:
for idx,body in enumerate(self.root.content):
print idx,id(body),": ", body
if body is my_obj:
print "Match at index {0}".format(idx)
然后我得到以下输出:
...
12 64788560 : REAL(KIND=wp), intent(inout) :: rdt
13 64788880 : INTEGER, intent(inout) :: istp
14 64717648 : INTEGER j
15 36601744 : INTEGER i
16 36599504 : INTEGER istop, jstop
Match at index 16
17 36599952 : DO j=2,jstop
...
但是,如果我使用内置索引方法,如下所示:
my_index = self.root.content.index(my_obj)
print "ID for object at returned index ({0}) is: {1}".\
format(my_index, id(self.root.content[my_index]))
然后我得到:
ID for object at returned index (13) is: 64788880
我无法解释这一点。谁能摆脱任何光明? (我已经检查了self.root.content的type(),它是'list'。)
感谢凯文的建议,我试过了:
for idx,body in enumerate(self.root.content):
print idx,id(body),": ", body
if body == my_obj:
print "Match at index {0}".format(idx)
这给了:
...
13 48174928 : INTEGER, intent(inout) :: istp
Match at index 13
14 48099600 : INTEGER j
Match at index 14
15 48095184 : INTEGER i
Match at index 15
16 48092944 : INTEGER istop, jstop
Match at index 16
...
我的印象是索引方法在提供的对象列表中返回索引。如果不是这种情况,那么它与任意/复杂对象匹配的是什么?
答案 0 :(得分:0)
回答我自己的问题,因为我已经弄明白了: 列表中的某些(但不是全部)对象属于已重写 eq 运算符且已更改测试的默认行为以进行相等的类。推测index()方法测试的是相等而不是使用'。 我想我必须使用' is'来手动查找。像我在问题中的第一个代码片段中那样进行测试。