Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能在Python中获取linkdeque中节点的值吗?_Python_Linked List_Deque - Fatal编程技术网

为什么可以';我不能在Python中获取linkdeque中节点的值吗?

为什么可以';我不能在Python中获取linkdeque中节点的值吗?,python,linked-list,deque,Python,Linked List,Deque,问题是: 当我在python中尝试这一点时: class _DoublyLinkedBase: class _Node: __slots__ ="_element", "_prev", "_next" def __init__(self, element, prev, next): self._element = element self._prev = prev self._nex

问题是: 当我在python中尝试这一点时:

class _DoublyLinkedBase:
    class _Node:
        __slots__ ="_element", "_prev", "_next"

        def __init__(self, element, prev, next):
            self._element = element
            self._prev = prev
            self._next = next
    def __init__(self):
        self._header = self._Node(None, None, None)
        self._trailer = self._Node(None, None, None)
        self._header._next = self._trailer
        self._trailer._prev = self._header
        self._size = 0

    def __len__(self):
        return self._size

    def is_empty(self):
        return self._size == 0

    def _insert_between(self, e, predecessor, successor):
        newest = self._Node(e, predecessor, successor)
        predecessor._next = newest
        successor._prev = newest
        self._size += 1
        return newest

    def _delete_node(self, node):
        predecessor = node._prev
        successor = node._next
        predecessor._next = successor
        successor._prev = predecessor
        self._size -= 1
        element = node._element
        node._prev = node._next = node._element = None
        return element

class LinkedDeque(_DoublyLinkedBase):
    def first(self):
        if self.is_empty():
            raise Empty("Deque is empty")
        return self._header._next._element


    def last(self):
        if self.is_empty():
            raise Empty("Deque is empty")
        return self._trailer._prev._element

    def insert_first(self, e):
        self._insert_between(e, self._header, self._header._next)

    def insert_last(self, e):
        self._insert_between(e, self._trailer._prev, self._trailer)

    def delete_first(self):
        if self.is_empty():
            raise Empty("Deque is empty")
        return self._delete_node(self._header._next)

    def delete_last(self):
        if self.is_empty():
            raise Empty("Deque is empty")
        return self._delete._node(self._trailer._prev)
a=linkedque()##创建一个链接的数据块
b=_双链接数据库。_节点(5,无,无)35;#创建一个节点
a、 插入_first(b)35;#将b放在第一位
a、 首先()检查元素
出[42]:

为什么输出不是5?

您的
insert\u first
方法希望传入一个元素,而不是
\u Node类型的对象(它将自己将元素包装在
\u Node
中)。因此,将初始化的
b
替换为:

a = LinkedDeque()    ## create a linked deque
b = _DoublyLinkedBase._Node(5, None, None)   ## create a node
a.insert_first(b)    ##put b in the first place
a.first()       ##check the element

Out[42]: <_DoublyLinkedBase._Node instance at 0x117660830>

所列代码上的缩进有问题为什么要嵌套类?这使得您的代码不必要地令人讨厌,无法理解,也没有给您带来任何好处……哦,这些代码是从Python中的数据结构和算法一书中复制的。
b = 5  # Initialize an element.