[英]__init__ and create a linked list in Python
我对 Python 很陌生。 虽然我可以在 arrays 中进行一些操作并定义一个新的 function,但这是我第一次使用class
和__init__
。 我正在解决 Python 中的链表问题,并且第一次自己定义一个列表。
我使用的代码如下:
class Node:
def __init__(self, data = None, next = None):
self.data = data
self.next = next
class LinkedList:
def __init__(self):
self.head = None
LL = LinkedList()
LL.head = Node(3)
print(LL.head.data)
我有几个问题。
对于 class,我可以将其视为 object 之类的array
吗?
def __init__
的含义? 我可以将其视为class_var
中的操作吗? 例如,对于节点,我们分配两个参数, data
和next
,默认值为None
,然后命令Node.data
和Node.next
将返回结果。 它类似于array.sum()
和array.len()
吗?
在Node
中我们创建了两个参数,但在LinkedList
中,我们不分配任何参数。 但是,在声明中,有self.head = None
。 它是否创建一个默认值为None
的参数head
? 为什么我们要把它写成
class LinkedList:
def __init__(self, head = None):
self.head = Node
这是基本版本。 我发现了另一个高级版本:
class Node:
def __init__(self, data):
self.data = data
self.next = None
def __repr__(self):
return self.data
class LinkedList:
def __init__(self):
self.head = None
def __repr__(self):
node = self.head
nodes = []
while node is not None:
nodes.append(node.data)
node = node.next
nodes.append("None")
return " -> ".join(nodes)
__repr__
在这里做什么?
' -> '.join(node)
在这里做什么?
对不起,说来话长,但我希望我能找到这里发生的事情。 谢谢你的帮助。
对我来说,这似乎是一个奇怪的链表实现,但我是物理学家,而不是计算机科学家。 我记得,虽然这是实现链表的一种非常标准的方式。 在您显示的代码中,没有“合并”链表 object。 链表 class 只存储头节点,每个节点包含它的数据和链表中下一个节点 object 的名称。 你可以把它想象成一个数组,但一个关键的区别是数组是一个 object ,而链表是链接在一起的单独对象的集合。 这就是为什么我觉得这很奇怪,因为我对存储在一个 object 中的所有数据感觉更舒服,而不仅仅是“自由放养”。 这样做肯定有一些好处,更熟悉 CS 的人可能知道答案。
就您的其他问题而言,__init __init__()
function 是您声明新的 object 时调用的 function。 它初始化 object,有点像构造函数。
命令Node.next
与array.sum()
,因为第一个是返回存储在名为next
的 class 变量中的数据,第二个是对数组执行操作。
对于第三个问题,我认为LinkedList
class 的__init__()
function 应该将节点作为参数之一。 此外,在这段代码中:
LL = LinkedList()
LL.head = Node(3)
我不认为这是你应该分配 class 变量的方式。 您应该在初始化时设置头节点(使用__init__()
)或创建一个“setter” function 可以修改self.head
class 变量并使用该 ZC1C425268E68A385D1AB5074F147。 这段代码就是你想要的:
class LinkedList:
def __init__(self, head = None):
self.head = Node
除了它应该是这样的:
class LinkedList:
def __init__(self, head = None):
self.head = head
这使得默认行为self.head = None
,因此如果您声明一个没有头节点的新LinkedList
object,则头节点将为空。
__repr__()
function 是 function 的表示。 它基本上是一个 function 可以创建 object 的字符串表示形式,除非您必须确定 object 的字符串表示形式。 对于此链表的情况,它将(按顺序)收集节点处的所有数据,然后将它们打印出来。 所以如果我的头节点存储数字5,下一个节点存储数字9,最后一个节点存储数字7,那么将__repr__()
function应用到头节点将返回字符串
5 -> 9 -> 7
' -> '.join(node)
获取节点数组中的所有项目并将它们打印为字符串,字符串->
分隔每个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.