簡體   English   中英

使用遞歸查找嵌套列表的總和

[英]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的遞歸方法。

(數學)遞歸由初始值和某些項與其先前項之間的關系定義。 初始值可以由reduceinitializer參數指定,在這種情況下,它被設置為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM