嗨我有一个嵌套列表,我应该从递归函数中加总它 我怎样才能做到这一点? 我的解决方案没有工作
a <- !is.na(test)
b <- cor(test,use = "pairwise.complete.obs")
b[t(a)%*%a < 4] <- NA
答案 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))