![](/img/trans.png)
[英]Python - Using Recursion to find the sum of Max and Min in a nested list
[英]Find sum of nested list using recursion
使用遞歸查找嵌套列表的總和
lst = [1,2,[3,4],[5,6]]
def findSum(values,sum,idx):
if len(values) == idx:
return sum
if isinstance(values[idx],list):
return findSum(values[idx],sum,0)
else:
sum = sum + values[idx]
return findSum(values,sum,idx+1)
print(findSum(lst,0,0))
Output 應該是21
但我只得到10
最后一個索引子數組([5,6])沒有得到計算。
誰能建議我,我在邏輯上做錯了什么?
您可以遞歸遍歷列表,如下所示
def recur_sum(lst):
s = 0
for x in lst:
if type(x) == list:
s += recur_sum(x)
else:
s += x
return s
lst = [1,2,[3,4],[5,6]]
print(recur_sum(lst))
編輯: OP 代碼的問題是,代碼在處理完子列表並從那里返回后沒有繼續前進。
關於源代碼問題,前面有一些很好的提示,所以我不打算在這里重復。
這只是解決這個問題的一種更簡單的方法,也許可以作為參考。
A = [1, 2, [3, 4], [5,6]]
def sum_lst(A):
total = 0
for x in A:
if isinstance(x, list):
total += sum_lst(x)
else:
total += x
return total
print(sum_lst(A)) # 21
只是為了好玩:使用reduce
的遞歸方法。
(數學)遞歸由初始值和某些項與其先前項之間的關系定義。 初始值可以由reduce
的initializer
參數指定,在這種情況下,它被設置為0
。 遞歸的 function 可以作為參數傳遞給reduce
。
注意:
for
循環from functools import reduce
def recursive_relationship(i, j):
if isinstance(j, list):
if j:
return recursive_relationship(i+j[0], j[1:])
else:
return i
return i + j
lst = [1,2,[3,4],[5,6], [8]]
#lst = [[1, 2], [1, 2,3], [1]]
print(reduce(recursive_relationship, lst, 0))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.