【问题标题】:How to print list vertically using recursion?如何使用递归垂直打印列表?
【发布时间】:2020-10-30 00:46:47
【问题描述】:

我想以递归方式垂直打印此列表: 示例:

print_list(['hi', [22,45], 'dog', 21])

预期:

hi
[22, 45]
dog
21

这是我的代码:

def print_list(n_list):
    if len(n_list) == 0:
            return
    else:
        half = len(n_list) // 2
        for i in range(half):
            if half == 2:
                print (n_list[i], sep = "\n")
        else:
            print (n_list[half+i])

这是我得到的:

hi
[22, 45]
dog

我不确定为什么列表没有完整打印。对于具有更多项目的列表也会发生这种情况,仅显示一部分。我知道我在打印语句中弄乱了一些东西,但无法弄清楚......

【问题讨论】:

  • 这是一道作业题,不是吗?
  • Naansense 硬件,是的。

标签: python python-3.x recursion reduction


【解决方案1】:
n_list = ['hi', [22,45], 'dog', 21]
print(*n_list, sep='\n')

给予

hi
[22, 45]
dog
21

【讨论】:

    【解决方案2】:

    您很接近,但您没有应用归约,因为您的函数不会调用自身。这是您的代码稍作修改的版本,应该可以工作:

    def print_list(n_list):
      if len(n_list) == 0:
        return
      else:
        half = (len(n_list) + 1) // 2
    
        # Print elements in the first half:
        for i in range(half):
          print(n_list[i])
    
        # Print second half using recursion:
        print_list(n_list[half:])
    

    【讨论】:

    • 这就是我要找的东西!非常感谢!
    【解决方案3】:

    这个函数不会产生你想要的结果吗?

    def print_list(n_list):
        for item in n_list:
            print(item)
    
    

    我不知道你为什么只尝试迭代列表的一半以上half = len(n_list) // 2?

    【讨论】:

    • 你不需要str。
    • 它确实...但是我应该用减少方法来解决它,这就是重点。
    • @CasperNe 您的问题似乎不太清楚。缺少项目是因为您将范围除以二。减少方法是什么意思?您的问题在任何地方都没有说明。
    • @CasperNe 为了减少你需要一个递归函数。您的代码中的任何地方都没有递归。
    • @CasperNe 编辑您的帖子以实际解释您的问题和限制。
    猜你喜欢
    • 2013-11-24
    • 2018-05-04
    • 2022-01-07
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多