如何打印链表类的字符串表示形式

时间:2015-04-12 03:24:28

标签: python linked-list

我正在Python 3中实现一个链表。我正在尝试获取"1 2 3"之类的输出,其间有两个空格。我当前的代码打印出"1 2 3 "代替:

  def __str__ (self):
    current = self.first
    if (current == None):
      return None
    while (current.next != None):
      for i in range(1,10):
        if current != None or current != '':
          print(current.data,'  ',end='')
          current = current.next

如何摆脱最后两个空格?

2 个答案:

答案 0 :(得分:1)

在Python中,您通常会使用str.join()从具有一些常量分隔符的项集合构建字符串。这样可以解决在字符串的一端或另一端有一个额外分隔符的问题。

但是你需要给str.join()一个可迭代的。根据您对代码的显示来判断,您应该能够通过将__iter__方法定义为以下内容来使此类可迭代:

def __iter__(self):
    current = self.first
    while current is not None:
        yield current
        current = current.next

有关yield关键字和可迭代的详细信息,建议您阅读What does the "yield" keyword do in Python?

另请注意PEP 8 recommends using is not None rather than != None:

  

None等单身人士的比较应始终使用is或。{   is not,绝不是等号运算符

链接列表可迭代后,您的字符串表示就像:

一样简单
def __str__(self):
    return '  '.join(str(o) for o in self)  # two spaces between each item

在撰写you should return a string object, not print one in the body of the method.

__str__方法时请记住

答案 1 :(得分:0)

只是一个盲目的猜测:

def __str__ (self):
    current = self.first
    def get_data():
        current = current.next
        return current.data
    return " ".join([self.first.data] + list(iter(get_data,None)))

您介意分享您的链接列表实现吗?