📜  Python中的漂亮打印链表

📅  最后修改于: 2022-05-13 01:54:55             🧑  作者: Mango

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的神奇之处。这篇文章的主要目的是展示小魔法方法可以让你的生活变得更轻松。