列出结构大小函数,代码难度大

时间:2014-05-04 08:50:13

标签: python list python-3.x flatten

我需要编写一个获取列表结构并接收其大小的函数(大小)。大小是对括号的数量和列表结构中的整数。 例如:size([[[14],[23,[14]]]])= 8(5对括号,3个整数)

我写了一个代码但是我找不到每次调用递归时cnt都不会赋值为零的方法。 这是我的代码:

def flatten(lst):
    if type(lst)==int:
        return [lst]
    elif lst==[]:
        return []
    else:
        return sum(([x] if not isinstance(x, list) else flatten(x) for x in lst),[])

def size(lst):
    cnt=0
    if lst== []:
        return 1
    if type(lst)== int:
        return 1
    b= str(lst)
    ind= b.find('[')
    while ind!=-1:
        cnt+=1
        lst=lst[ind+1:]
        return cnt+ size(lst)
    return cnt+ len(flatten(lst))

1 个答案:

答案 0 :(得分:2)

你可以做一些更简单的事情,比如:

def size(lst):
    if type(lst) == int:
        return 1
    else:
        return 1 + sum(size(e) for e in lst)

print size([[[14],[23,[14]]]])