【问题标题】:calculate length of list recursively递归计算列表的长度
【发布时间】:2011-08-07 12:53:27
【问题描述】:

如果你有一个列表 = [1,2,3,4,5]

如何在不使用 len(list) 的情况下递归计算该列表的长度?

myarray = [1,2,3,4,5]

def mylist(myarray):
    if (myarray == []):
        print ("The list is empty")
        return 
    return 1 + ?

不想使用 len 而是每次列表中存在值时加 1。我该怎么做?

【问题讨论】:

  • 请将(myarray == [])替换为not myarray
  • 我不禁要问:你到底为什么要这么做?与标准 len 函数(Python 列表的常数时间非常短)相比,DTing 接受的答案具有 O(N**2) 复杂度,这简直是可怕的。

标签: python function recursion


【解决方案1】:
>>> def list_length(L):
...     if L:
...         return 1 + list_length(L[1:])
...     return 0
... 
>>> list_length(myarray)
5
>>> list_length([])
0
>>> list_length([1]*4)
4
>>> 

如果列表有元素,则返回 1 + 列表长度减去一个元素。

您可以通过几种不同的方式来执行此操作,但是切片 [:1] 或 [1:] 会分别给您减去最后一个或第一个元素,这是有道理的。

如果列表没有元素,返回0

【讨论】:

  • 此解释中的切片语法包含错误。可以使用[:-1] 返回列表减去最后一个元素。我会编辑这个,但显然编辑必须至少有 6 个字符。
【解决方案2】:

使用递归函数。

基本上再次调用该函数并将其返回的计数添加到结果中。重要的是确保您在函数无事可做时退出(返回)。

看看这篇文章 Python recursion and return statements

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 2018-08-31
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多