使用递归计算列表数量?

use*_*553 4 python recursion

这就是我尝试过的:

def recursive_list_counter(l):
    sum = 0
    for e in l:
        if type(e) == type([]):
            #print e
            sum += 1
            recursive_list_counter(e)
    return sum 

# should be 6 if I count the first also
recursive_list_counter([[[13, 7], 90], 2, [1, 100, [5, [2]]], 8, 6])
Run Code Online (Sandbox Code Playgroud)

我想使用递归来检索列表中的列表数量,也计算原始列表.

Mar*_*ers 10

递归调用忽略返回的内容.添加返回值:

def recursive_list_counter(l):
    sum = 0
    for e in l:
        if isinstance(e, list):
            sum += 1
            sum += recursive_list_counter(e)
    return sum 
Run Code Online (Sandbox Code Playgroud)

请注意,计数中将忽略外部列表,因此调用将返回5,而不是6.

此外,您应该使用isinstance()测试对象是否属于给定类型.

如果要查看6,请计算函数中的当前列表,并将计数嵌套列表留给递归调用:

def recursive_list_counter(l):
    sum = 1
    for e in l:
        if isinstance(e, list):
            sum += recursive_list_counter(e)
    return sum 
Run Code Online (Sandbox Code Playgroud)


mu *_*u 無 9

对于您给出的示例,如果您拥有的只是列表中的数字,则可以尝试转换为字符串并计算其数量 [

>>> li = [[[13, 7], 90], 2, [1, 100, [5, [2]]], 8, 6]
>>> str(li).count('[') 
6
Run Code Online (Sandbox Code Playgroud)

  • 但是,当列表中的s字符串包含一个左括号时,你的解决方案当然会失败.这是成本高昂的方法,因为生成字符串表示对于此任务不是必需的. (4认同)