使用递归函数求和嵌套列表

时间:2017-08-06 15:24:52

标签: python nested-lists

嗨我有一个嵌套列表,我应该从递归函数中加总它 我怎样才能做到这一点? 我的解决方案没有工作

 a <- !is.na(test)
 b <- cor(test,use = "pairwise.complete.obs")
 b[t(a)%*%a < 4] <- NA

4 个答案:

答案 0 :(得分:1)

使用isinstanceof函数而不是使用==

def summer(lst):
    if not isinstance(lst, list) : return lst

    sum = 0

    for x in lst:
        sum += summer(x)
    return sum


def main():
    a= [1,2,3, [5,6]]

    print(summer(a))

答案 1 :(得分:1)

起初可能很难掌握递归;因为概念化可能非常直观,但实施起来却很痛苦。我将尽可能彻底地解释我的答案,以便您了解到底发生了什么:

def n_l_sum(n,i):
    s=0 #somewhere to store our sum 
    lenLst= len(n)  
    cur = n[i] #sets current element to 'cur'
    if lenLst-1-i < 1: #this is the base case 
        return cur
    else:
        s = n_l_sum(n,i+1)+cur #where the actual iteration happens
        print(s) #give result 
        return s 

n=[6,4]
n_l_sum(n,0)

基础案例

要理解的第一个重要事项是 基本情况 这会使递归成为一种停止方式。

例如,如果没有它,该函数将返回IndexError,因为最终n_l_sum(n,i+1)最终将超过最大索引。因此lenLst-1-i < 1阻止了这一点;它是什么意思:如果只剩下一个元素做这个

了解递归

接下来,我喜欢把递归看作是一种深入地下的采矿演习,并在通往地面的路上收集它的赏金。这将我们带到 堆叠帧 ,您可以将它们视为深入地面(0-100米,100-200米)。在编程方面,它们是文字框架,用于存储不同的实例变量。在此示例中,cur在第1帧中为4,在第2帧中为6

一旦我们点击 基本情况 ,我们会回到框架中,这是s = n_l_sum(n,i+1)+cur做腿部工作的地方,并为我们计算总和。

如果您仍然在努力理解递归,请尝试通过http://www.pythontutor.com/visualize.html#mode=edit运行此代码,以查看变量级别上发生的情况。

答案 2 :(得分:0)

def n_l_s(n):
    s=0
    for i in n:
        if type(i) != type([]):
            s+=i
        else:
            s+=n_l_s(i)
    return s
n=[3, -1, [2, -2], [6, -3, [4, -4]]]
print(n_l_s(n))

输出:

5

答案 3 :(得分:0)

功能方式是:

def list_sum(l):
    if not isinstance(l, list):  # recursion stop, l is a number
        return l

    # do list_sum over each element of l, sum result
    return sum(map(list_sum, l))