- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作自己的 merge_list 函数。我已经创建了类 SList() 和类 _Node()。但是当我在 merge_list 中输入两个排序列表时,merge_list 函数无法比较两个节点的值,显示 type object '_Node' has no attribute '_element'
, but class _Node have _element attribute(I also try元素,但它也不起作用)。我的函数有什么问题??
这是我的 class SList()
和 class _Node()
的部分代码以及 merge_list
的完整代码
class SList:
class _Node:
def __init__(self, element, next=None):
self._element = element
self._next = next
def element(self):
return self._element
def next(self):
return self._next
def set_element(self, element):
self._element = element
def set_next(self, next):
self._next = next
def __init__(self, head=None):
self._head = head
def insert_first(self, element):
self._head = self._Node(element, self._head)
def insert_after(self, element, p):
new_node = self._Node(element, p.next())
p._next = new_node
...和我的 merge_list 函数
def merge_list(s1, s2):
s3 = SList()
s3._Node(None, None)
prev = s3
while s1 != None and s2 != None:
if s1._Node._element<= s2._Node._element: # this line is the problem
prev.next = s1
s1 = s1.next
else:
prev.next = s2
s2 = s2.next
prev = prev.next
if s1 == None:
prev.next = s2
elif s2 == None:
prev.next = s1
return s3.next
我做了这个函数之后,我输入了两个这样的排序列表并调用了merge_list函数
if __name__ == "__main__":
s1 = SList()
s1.insert_first(1)
s1.insert_first(3)
s1.insert_first(5)
s1.insert_first(7)
s1.insert_first(9)
s1.insert_first(11)
s1.insert_first(13)
print(f"s1 :", s1)
s2 = SList()
s2.insert_first(2)
s2.insert_first(4)
s2.insert_first(6)
print(f"s2 : ", s2)
merge_list(s1, s2)
输出是
Traceback (most recent call last):
s1 : 13 -> 11 -> 9 -> 7 -> 5 -> 3 -> 1 -> None: 7 element(s)
s2 : 6 -> 4 -> 2 -> None: 3 element(s)
File "", line 334, in <module>
merge_list(s1, s2)
File "", line 151, in merge_list
if s1._Node._element<= s2._Node._element:
AttributeError: type object '_Node' has no attribute '_element'
似乎s1、s2列表创建成功,但是无法比较节点的值。 merge_list 函数有什么问题??
最佳答案
让我们一步一步来
class SList:
class _Node:
注意 为什么要在 SList 类中定义 Node 类?这不是常见的做法,除非您永远不希望从 Slist 外部访问节点(即使那样)
def __init__(self, element, next=None):
self._element = element
self._next = next
def element(self):
return self._element
def next(self):
return self._next
def set_element(self, element):
self._element = element
def set_next(self, next):
self._next = next
注意 Init/getters 和 setters。到现在为止,一切都说得通了。但是,我个人更喜欢库@attrs。但我们稍后会谈到这一点。
def __init__(self, head=None):
self._head = head
def insert_first(self, element):
self._head = self._Node(element, self._head)
def insert_after(self, element, p):
new_node = self._Node(element, p.next())
p._next = new_node
def merge_list(s1, s2):
s3 = SList()
s3._Node(None, None)
prev = s3
while s1 != None and s2 != None:
if s1._Node._element<= s2._Node._element: # this line is the problem
好吧,由于评论中提到的原因,这根本行不通:类 _Node 没有 _element 属性。实例确实如此。
prev.next = s1
prev
是 s3
,它是 SList
,因此 next 不应该有属性?
s1 = s1.next
else:
prev.next = s2
s2 = s2.next
prev = prev.next
if s1 == None:
prev.next = s2
elif s2 == None:
prev.next = s1
return s3.next
class _Node:
def __init__(self, element, next=None):
self._element = element
self._next = next
@property
def element(self):
return self._element
@property
def next(self):
return self._next
def set_element(self, element):
self._element = element
def set_next(self, next):
self._next = next
class SList:
def __init__(self, head=None):
self._head = _Node(head)
@property
def head(self):
return self._head
def insert_first(self, element):
self._head = _Node(element, self._head)
def insert_after(self, element, p):
new_node = _Node(element, p.next())
p._next = new_node
def merge_list(s1, s2):
s3 = SList()
prev = s3._head
head_s1 = s1._head
head_s2 = s2._head
while (head_s1._element != None) and (head_s2._element != None):
if head_s1._element<= head_s2._element: # this line is the problem
prev.set_next(head_s1)
head_s1 = head_s1.next
else:
prev.set_next(head_s2)
head_s2 = head_s2.next
prev = prev.next
if head_s1 == None:
prev.set_next(head_s1)
elif head_s2 == None:
prev.set_next(head_s2)
return s3
关于python - 无法合并两个已排序的单链表,因为 "type object ' _Node' 没有属性 '_element' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55591163/
我创建了一个单链表。一切正常。 我只想知道我是否在我的代码中做了任何有潜在危险的事情。我关心的代码片段是我的推送、弹出和清理。部分代码仅用于用户交互,因此并不重要(无论如何我都发布了它,以便更清楚地了
链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(
我最近开始专注于使用数据结构及其用例的编码练习。下面是我的程序,将数据插入到单个链表中,其中每个节点存储下一个节点的对象。这个程序运行良好。我想了解下面的代码有多有效,所遵循的逻辑是否有效且高效。当节
尝试编写一种方法,从单链表中删除某个值的所有实例,但它似乎不起作用。 我试图适应头部是否包含该值,但我不确定这是否是正确的方法: public void remove (int value) {
struct nodeStruct { int value; struct nodeStruct *next; } struct nodeStruct* List_createNode
typedef struct node { int data; struct node *next; } NODE; NODE* add_head(NODE **phead, int data) {
void addToEnd() { newnode = (struct node*)malloc(sizeof(struct node)); printf ("Enter the cu
我想编写一种方法,从单向链表中删除具有重复数据值的连续项。该方法应返回移除的项目数。该方法应根据需要清理内存,并应假定内存是使用 new 分配的。 比如传入列表 ->a->b->c->c->a->b-
我有一个存储播放列表的表。它的定义非常简单,只有三列: setID - 引用播放列表中的一行的 16 位十六进制 songID - 16 位十六进制数,引用我的歌曲表中的一行 nextID - 16
为什么我的代码不删除链表的最后一个元素?我创建了一个当前指针来横向穿过我的列表并跳出循环..(下一个是我的结构中名为 Card_Node 的点)。回答起来应该很简单,只是不确定为什么它不会删除列表中的
大家好,我现在正在为期中考试学习,正在努力尝试使用单链表创建一个简单的程序。我想让它做的就是将“1”、“2”、“3”、“4”插入列表并打印出来。请看下面的代码: #include #include
我想创建单链表(使用类),其中每个列表中都有:指向文本的指针、整数、指向下一个列表的指针。 我需要实现 3 个功能:插入(将列表插入单链表并根据指针指向的文本使用strcmp对元素进行排序)remov
我已经实现了一个单链表,我注意到了非常奇怪的行为,但无法查明它发生的确切原因。我已经尝试使用 gdb 找出问题所在,看起来每当我计算列表的大小时,事情就开始出错了。这是我用来测试我的实现的程序,下面是
我正在尝试找出一种从链表中间删除的算法.. 我的想法是遍历链表,找到我要删除的节点之前的节点,命名为Nprev,将Nprev设置为Nnext,其中Nnext在要删除的节点之后Ndelete。 所以 N
我正在尝试创建一个简单的单向链表。以前,我成功地做到了这一点,没有任何错误,但是现在我遇到了错误。我怀疑由于第 23 行中的 if 语句,内存分配存在某种问题。 我尝试过的: 我在我的所有声明中都使用
我正在尝试创建一个简单的单向链表。以前,我成功地做到了这一点,没有任何错误,但是现在我遇到了错误。我怀疑由于第 23 行中的 if 语句,内存分配存在某种问题。 我尝试过的: 我在我的所有声明中都使用
我在学习C++语言的同时尝试构建一个链表,并实现一个从最低到最高的节点插入功能。我遵循了互联网和教科书中的一些教程。 我有一个用于链表节点设置的结构: struct Node { private:
本文实例讲述了Python数据结构与算法之链表定义与用法。分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表
1561/1563 test cases passed 问题描述: You are given two non-empty linked lists representing two non-nega
我有一个任务来实现一个单链表。我试图找出如何获取头部,但最终出现堆栈溢出错误或空指针错误。有人可以帮助我吗?我已经显示了相关的代码片段: public class Llist { privat
我是一名优秀的程序员,十分优秀!