[英]python dictionary .get() vs element in dictionary giving different results in DP based recursion program
字典獲取 vs 在 cansum 代碼中表現不同
def canSum(targetSum, numbers, memo=None):
if memo == None:
memo = {}
if targetSum in memo:
return memo[targetSum]
if targetSum == 0:
return True
if targetSum < 0:
return False
for n in numbers:
remainder = targetSum - n
if canSum(remainder, numbers, memo):
memo[targetSum] = True
return True
memo[targetSum] = False
return False
print(canSum(7, [2, 3])) # True
print(canSum(7, [5, 3, 4, 7])) # True
print(canSum(7, [2, 4])) # False
print(canSum(8, [2, 3, 5])) # True
print(canSum(3000, [7, 14])) # False -> Works fast with large inputs!
當用 if memo.get(targetSum) 替換第 4 行時,該函數對最后一個輸入不起作用,由於時間復雜度巨大而繼續運行
def canSum(targetSum, numbers, memo=None):
if memo == None:
memo = {}
if memo.get(targetSum,False):
return memo[targetSum]
if targetSum == 0:
return True
if targetSum < 0:
return False
for n in numbers:
remainder = targetSum - n
if canSum(remainder, numbers, memo):
memo[targetSum] = True
return True
memo[targetSum] = False
return False
print(canSum(7, [2, 3])) # True
print(canSum(7, [5, 3, 4, 7])) # True
print(canSum(7, [2, 4])) # False
print(canSum(8, [2, 3, 5])) # True
print(canSum(3000, [7, 14])) # False -> Keeps running no output obtained
任何人都可以解釋原因嗎? 我知道 .get 和 in 的工作方式如何不同,在下面附上了相關的 SO 線程:
您的代碼的兩個版本並不等效。
在memo[targetSum]
存在且為False
的情況下,塊:
if targetSum in memo:
return memo[targetSum]
會返回False
,但是
if memo.get(targetSum,False):
return memo[targetSum]
不會執行return
,因為memo.get(targetSum,False)
是False
。 在這種情況下,您將在函數末尾運行循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.