蟒双链表__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 
+3

您使用此列表并获取该错误的代码在哪里? – BrenBarn

+0

您需要提供有问题的实际代码 – jamylak

+2

在得到'AssertionError'之前,您是否需要断言某些内容? –

您的add函数没有任何东西会增加self.size。所以无论你在__init__,它可能0设置它。

因此,当列表实际为空时,__len__返回0,因为self.headNone

你添加元素后,它仍然回报因为0self.size0


此外,您的代码中至少还有一个其他问题。看看这个:

elif value > self.tail.data: 
    self.tail = newNode 
    newNode.prev = self.tail 
    newNode.next = None 
    return newNode 

显然,newNode.prev将要结束了在自己指指点点,而不是以前的尾巴。

有很多事情可以帮助判断代码单元测试的正确性,没有用过代码的人进行代码评审,通过交互式可视化工具逐步完成代码审查,正式证明等等 - 但是,你工作的时间不是这些事情之一。

+0

即时将要测试这一点。并看看是否有效,谢谢 – user2218154

+0

它的工作,谢谢大家的帮助。我从来没有想过,我的len函数的问题是因为我的add函数!我必须学会在盒子外面思考! – user2218154

+0

+1 - 我希望我可以再次*对于陈述“有很多事情可以帮助判断代码的正确性......你工作的小时数不是这些事情之一” – mgilson