def printlist(list):
if list == []:
print " "
else:
print str(list[0]) + " " + str(printlist(list[1:]))
如果给出了一个列表,例如printlist(['D','R','B','T'])
,则会返回
T None
B None
R None
D None
我想要显示D R B T
。我怎样才能做到这一点? (不使用' '.join()
)
答案 0 :(得分:2)
问题是你的函数打印一个值,而不是返回一个(这意味着它返回默认值None
)......但是,在同一个函数中,您尝试调用它并使用其返回值。当然,这是None
。
在str()
上拨打None
无济于事;它只是给你字符串"None"
。
如果您试图“取回”您在屏幕上打印但后来忘记的值,则无法执行此操作。如果您想要这些价值观,请不要忘记它们!
你可能想要的是这样的:
def strlist(lst):
if not lst:
return " "
else:
return str(lst[0]) + " " + strlist(lst[1:])
def printlist(lst):
print strlist(lst)
...它有一个函数返回一些东西并使用返回的值而不是仅仅打印,或者这个:
def printlist(lst):
if not lst:
print " "
else:
print str(lst[0]) + " "
printlist(lst[1:])
...它的函数不会尝试使用它永远不会得到的返回值。
(我已经修复了另外两个小问题 - 不要命名变量list
,因为这是类型的名称,你不想隐藏它,也不要检查== ""
当空列表已经为假时。{/ p>
当然值得注意的是strlist
在这种情况下只是" ".join
的一个缓慢而复杂的版本,所以你可以这样做:
def printlist(lst):
print " ".join(map(str, lst))
另外,无论哪种方式,我都不确定你在哪里,也不想换行。你可以在行的末尾添加空格,所以你可能想要在同一行上跟随其他东西(否则为什么要打扰空间),但是你会在没有魔术逗号的情况下执行print
语句,这总是会添加换行符在每次print
之后。
答案 1 :(得分:0)
这样的事情:
def printlist(list):
if list == []:
print " "
else:
print str(list[0]) + " "
printlist(list[1:]))
答案 2 :(得分:0)
每次迭代都在执行一个print()函数,该函数以\ n字符结束 - 因此是多行的。
第二个问题是你的字符串的一个构造函数是printlist(),它没有返回值,因此最后是None值。
所以你需要先做的是从列表中构建字符串,然后在构造的字符串上执行一个print()。
这就是为什么python中常见的习惯用语:
print ' '.join(list)
因为这正是这里发生的事情 - join()从列表中创建一个字符串,print在结果上执行一次。
有人提到join()仅适用于字符串 - 这是真的 - 所以你可以改为列表理解。还有人指出,Python2的“打印”在技术上是一种陈述,而不是一种功能 - 因此,满足挑剔,这是另一种方式:
from __future__ import print_function
def print_list(l):
print(' '.join([str(x) for x in l]))