Python-带打印的递归

时间:2013-11-30 21:02:40

标签: python list recursion printing

我需要打印list的元素,这样如果一个元素是100或更大,它后跟一个换行符,如果没有,则后跟一个空格。

这是我到目前为止所做的:

def function(list):
    if list == []:
        return None
    elif list[0] >= 100:
        print(list[0], function(list[1:]), end = '\n')
    else:
        print(list[0], function(list[1:]), end = '')
    return None

但是当我尝试list = [2,3,103,8,10]时, Python打印:

  

10无8无103无

     

3无2无

有任何建议/帮助吗?

3 个答案:

答案 0 :(得分:1)

列表是保留字。

myList = [2,3,103, 8, 10]
for i in myList:
   print(i, end = (i>=100) and '\n' or ' ')

答案 1 :(得分:1)

你走在正确的轨道上。这就是你想要的:

def function(lst):
    if not lst:
        return
    elif lst[0] >= 100:
        print(lst[0], end='\n')
    else:
        print(lst[0], end=' ')
    function(lst[1:])

(我将list重命名为lst,因为list是我们不想覆盖的内置类型。

说明:如果我们在print调用中有递归调用,我们打印函数的返回值,它总是为None,因为它永远不会返回任何其他内容。所以我们必须将它移到外面。

此外,空列表的布尔值为False,因此我们可以按PEP 8的建议将lst == []替换为not lst

答案 2 :(得分:0)

在您的函数存在后,它返回None,这就是您的print语句中包含“None”的原因。只需在print

之外移动递归调用即可
    elif list[0] >= 100:
        function(my_list[1:])
        print(my_list[0], end='\n')
    else:
        function(my_list[1:])
        print(my_list[0], end='')