(Python)无法将列表正确打印到字符串中

时间:2013-12-31 02:19:27

标签: python list

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()

3 个答案:

答案 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]))