python双链表__

python双链表__,python,Python,我似乎无法让我的len功能正常工作,我一直在尝试很多东西,但我是一个完全的初学者,所以我很确定我错过了一些非常明显的东西。这是我的密码 def __len__(self): if self.head is None: return 0 else: return self.size 我的想法很简单。如果双链接列表的头是None,那么它必须为空,因此返回0,否则,只返回列表的大小 然而,我得到一个假设错误,说 AssertionError: Lis

我似乎无法让我的len功能正常工作,我一直在尝试很多东西,但我是一个完全的初学者,所以我很确定我错过了一些非常明显的东西。这是我的密码

 def __len__(self):
    if self.head is None:
        return 0
    else:
        return self.size
我的想法很简单。如果双链接列表的头是None,那么它必须为空,因此返回0,否则,只返回列表的大小

然而,我得到一个假设错误,说

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
def添加(自身,值):
newNode=DoubleListNode(值)
如果self.head为无:
self.head=newNode
self.tail=newNode
newNode.prev=None
newNode.next=None
返回新节点
elif值self.tail.data:
self.tail=newNode
newNode.prev=self.tail
newNode.next=None
返回新节点
其他:
node=self.head
node2=节点
当node不是None且node.data<值时:
node=node.next
node2=node.prev
newNode.next=node.prev
newNode.prev=node2.next
返回新节点

您的
添加
函数没有任何会增加自身大小的内容。所以它是你在
\uuuu init\uuuu
中设置的,大概是
0

因此,当列表实际为空时,
\uuu len\uuu
返回
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
最终将指向自身,而不是前面的尾部


有很多东西可以帮助判断代码单元测试的正确性,没有进行过代码单元测试的人进行的代码审查,通过交互式可视化工具,形式证明,等等-但是你在上面工作的小时数不是这些事情之一。

你的
add
函数没有任何会增加self.size的东西。所以它是你在
\uuuu init\uuuu
中设置的,大概是
0

因此,当列表实际为空时,
\uuu len\uuu
返回
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
最终将指向自身,而不是前面的尾部


有很多东西可以帮助判断代码单元测试的正确性,没有进行过代码单元测试的人进行的代码审查,通过交互式可视化工具,形式证明,等等-但是你在上面工作的小时数不是这些事情之一。

你使用此列表并得到错误的代码在哪里?你需要提供有问题的实际代码。在得到
断言错误之前,你不需要断言一些东西吗?
添加
中有什么代码,那么如何修改
大小
呢?在哪里定义
测试列表
?你能粘贴所有的代码吗?你使用这个列表并得到那个错误的代码在哪里?你需要提供有问题的实际代码。在你得到一个
AssertionError
之前你不需要断言一些东西吗?什么代码在
add
中,以及
大小如何修改?你在哪里定义
testList
?你能粘贴所有的代码吗?它成功了,谢谢大家的帮助。我从来没有想到我的len函数的问题是因为我的add函数!!我必须学会跳出框框思考+1--我希望我能再次投票支持这样一句话:“有很多东西可以帮助判断代码的正确性……你在代码上工作的小时数不是这些东西中的一个。”它成功了,谢谢大家的帮助。我从来没有想到我的len函数的问题是因为我的add函数!!我必须学会跳出框框思考+1--我希望我能再次投票支持这样一句话:“有很多东西可以帮助判断代码的正确性……你花在代码上的时间不在其中。”