【问题标题】:Python- recursion with printingPython-带打印的递归
【发布时间】:2013-11-30 21:02:39
【问题描述】:

我需要打印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 无

有什么建议/帮助吗?

【问题讨论】:

  • 问题是你也在打印函数调用的返回。将递归调用放在打印语句之外。

标签: python list recursion printing


【解决方案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】:

    list 是保留字。

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

    【讨论】:

    • print 作为函数强烈建议使用 Python 3.x,因此您可以使用 "\n" if i >= 100 else " " 而不是狡猾的 and or 东西。
    • 是的——我更习惯python 2.x
    【解决方案3】:

    您的函数存在后,它返回None,这就是您的打印语句中包含“无”的原因。只需将递归调用移到打印之外

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      相关资源
      最近更新 更多