蟒双链表__len__
我似乎无法让我的len功能工作,我一直在尝试堆的东西,但我是一个完整的初学者,所以我很肯定我缺少一些完全明显的东西。这是我的代码...蟒双链表__len__
def __len__(self):
if self.head is None:
return 0
else:
return self.size
我的想法很简单。如果双链表的头部是None,那么它必须是空的,所以返回0,否则返回列表的大小。
但是,我得到一个错误asssertion说...
AssertionError: List should contain 1 element, but length is 0
任何帮助表示赞赏,谢谢提前。
编辑:这是代码运行的多数民众赞成我的功能...
testList.add(14)
assert len(testList) == 1, "List should contain 1 element, but length is %r" % len(testList)
EDIT2:这是我的附加功能,即时通讯相当肯定其右,我花2个小时吧...
def add(self, value):
newNode = DoubleListNode(value)
if self.head is None:
self.head = newNode
self.tail = newNode
newNode.prev = None
newNode.next = None
return newNode
elif value < self.head.data:
self.head = newNode
newNode.next = self.head
newNode.prev = None
return newNode
elif value > self.tail.data:
self.tail = newNode
newNode.prev = self.tail
newNode.next = None
return newNode
else:
node = self.head
node2 = node
while node is not None and node.data < value :
node = node.next
node2 = node.prev
newNode.next = node.prev
newNode.prev = node2.next
return newNode
您的add
函数没有任何东西会增加self.size
。所以无论你在__init__
,它可能0
设置它。
因此,当列表实际为空时,__len__
返回0
,因为self.head
是None
。
你添加元素后,它仍然回报因为0
是self.size
0
。
此外,您的代码中至少还有一个其他问题。看看这个:
elif value > self.tail.data:
self.tail = newNode
newNode.prev = self.tail
newNode.next = None
return newNode
显然,newNode.prev
将要结束了在自己指指点点,而不是以前的尾巴。
有很多事情可以帮助判断代码单元测试的正确性,没有用过代码的人进行代码评审,通过交互式可视化工具逐步完成代码审查,正式证明等等 - 但是,你工作的时间不是这些事情之一。
即时将要测试这一点。并看看是否有效,谢谢 – user2218154
它的工作,谢谢大家的帮助。我从来没有想过,我的len函数的问题是因为我的add函数!我必须学会在盒子外面思考! – user2218154
+1 - 我希望我可以再次*对于陈述“有很多事情可以帮助判断代码的正确性......你工作的小时数不是这些事情之一” – mgilson
您使用此列表并获取该错误的代码在哪里? – BrenBarn
您需要提供有问题的实际代码 – jamylak
在得到'AssertionError'之前,您是否需要断言某些内容? –