我正在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
如何摆脱最后两个空格?
答案 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)))
您介意分享您的链接列表实现吗?