不知道我在做什么错。我上了这个课:
class Node:
'''
Class to contain the lspid seq and all data.
'''
def __init__(self, name,pseudonode,fragment,seq_no,data):
self.name = name
self.data = {}
self.pseudonode = pseudonode
self.seq_no = seq_no
self.fragment = fragment
def __unicode__(self):
full_name = ('%s-%d-%d') %(self.name,self.pseudonode,self.fragment)
return str(full_name)
def __cmp__(self, other):
if self.name > other.name:
return 1
elif self.name < other.name:
return -1
return 0
def __repr__(self):
full_name = ('%s-%d-%d') %(self.name,self.pseudonode,self.fragment)
#print 'iside Node full_name: {} \n\n\n ------'.format(full_name)
return str(full_name)
并将一些条目放入列表中:
nodes = []
node = Node('0000.0000.0001',0,0,100,{})
nodes.append(node)
>>> nodes
[0000.0000.0001-0-0]
node = Node('0000.0000.0001',1,0,100,{})
nodes.append(node)
>>> nodes
[0000.0000.0001-0-0, 0000.0000.0001-1-0]
我正在尝试获取列表节点中节点的索引[]
>>> node
0000.0000.0001-1-0
>>> nodes.index(node)
0
0不是我期望的。不知道为什么会这样。
编辑 我在获得列表的索引后,即“ 0000.0000.0001-1-0”所在的位置。
答案 0 :(得分:3)
index
函数在容器上使用时,依赖于其元素的__cmp__
函数返回它认为与输入对象相等的第一个元素的索引。您可能知道很多,因为您为节点实现了它。但是您期望的是__cmp__
不仅考虑名称,还考虑伪节点和片段,对吗?
一种直接的方法是将它们视为一个元组,该元组从左到右执行元素比较,直到找到第一个不等式:
def __cmp__(self, other):
self_tuple = (self.name, self.pseudonode, self.fragment)
other_tuple = (other.name, other.pseudonode, other.fragment)
if self_tuple > other_tuple:
return 1
elif self_tuple < other_tuple:
return -1
return 0
如果需要其他顺序,则可以使用元组顺序来定义它。