簡體   English   中英

使用遞歸檢查列表中元組的總和

[英]Using Recursion to check for sum of tuples in a list

我有一個函數,它接受一個元組列表,每個元組包含兩個項目:項目名稱和值。 如果可以將元組列表分成兩個相等的值組,我需要 func 返回 True,否則返回 False。 function 應該是遞歸的並且不應該使用任何循環。

例如,

func([('tree', 500), ('keyboard', 200), ('pen', 300)])

應該是True ,因為keyboard + pen = tree 的值可以分成兩個相等的組。

到目前為止,我設法寫的是:

def func(lst):
if len(lst) == 1 or len(lst) == 0:
    return False
elif len(lst) == 2:
    if lst[0][1] != lst[1][1]:
        return False
    else:
        return True

但它只涵蓋基本情況。 任何幫助將不勝感激。

對於大列表不是很有效,但我認為它是遞歸的,因為學校工作:

def divide(lst, left_sum, right_sum):
    # if no more elements,
    # then it is true if  left_sum == right_sum else false
    if not lst:
        return left_sum == right_sum

    obj, value = lst[0]
    # element can go either left or right
    return divide(lst[1:],left_sum + value, right_sum) or divide(lst[1:],left_sum, right_sum+value)

assert divide([('tree', 500), ('keyboard', 200), ('pen', 300)],0,0)
assert not divide([('tree', 500), ('keyboard', 200), ('pen', 301)],0,0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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