Python中的漂亮打印链表
创建自定义数据类型可能很棘手,尤其是当您想像使用任何其他数据类型一样使用它时。链表可以被认为是自定义数据类型的一个例子。在其他语言中,如果你想打印链表,你会定义一个单独的打印函数,类似于pprint但它看起来有点奇怪,对吧?就像让默认打印函数做同样的事情会很棒,对吧?嗯,这就是Python的用武之地。 Python有一些令人惊奇的方法,称为Dunder 方法。
邓德方法
Dunder 代表双重方法。基本上,任何以双下划线开头和结尾的方法都称为Dunder方法或Magic方法。 under 方法的一个这样的例子是__init__ 。一种类似的方法是__str__ ,我们将在本文中使用它。此方法可用于Python中的漂亮打印。漂亮的打印只不过是应用各种样式并格式化要打印的内容。在此处了解有关 dunder 方法的更多信息。
__str__方法指定使用标准打印函数打印该类时应从该类返回的内容。使用这个概念,我们可以更好地表示自定义数据类型。此处,波纹管是此类自定义表示的示例。请注意,重点是链表实现,但更多的是 Pythonic 表示它的方式。
示例:漂亮地将单链表10->15->20打印为[10, 15, 20]
Python3
class Node:
def __init__(self, val=None):
self.val = val
self.next = None
class LinkedList:
def __init__(self, head=None):
self.head = head
def __str__(self):
# defining a blank res variable
res = ""
# initializing ptr to head
ptr = self.head
# traversing and adding it to res
while ptr:
res += str(ptr.val) + ", "
ptr = ptr.next
# removing trailing commas
res = res.strip(", ")
# chen checking if
# anything is present in res or not
if len(res):
return "[" + res + "]"
else:
return "[]"
if __name__ == "__main__":
# defining linked list
ll = LinkedList()
# defining nodes
node1 = Node(10)
node2 = Node(15)
node3 = Node(20)
# connecting the nodes
ll.head = node1
node1.next = node2
node2.next = node3
# when print is called, by default
#it calls the __str__ method
print(ll)
输出
[10, 15, 20]
请注意,在打印类时,默认调用__str__ 。这就是Python的神奇之处。这篇文章的主要目的是展示小魔法方法可以让你的生活变得更轻松。