[英]unhashable type: 'list' in python
我在遞歸中使用“備忘錄”。 dict 的鍵是一個元組 (number, list),遞歸是一個 function 的 number, list 和 memo(dict)
我收到一個錯誤“TypeError: unhashable type: 'list'” 這是什么原因?
我應該找到所有改變的選擇。 數字是錢的總和,清單是我擁有的硬幣(我有無數個)。 我試圖將列表轉換為元組,但后來我無法使用列表方法
def find_num_changes_mem(n, lst, memo=None):
lst.sort(reverse=True)
if n<0:
return 0
if len(lst)==0:
if n==0:
return 1
else:
return 0
if memo==None:
memo={}
if lst[0]>n:
return find_num_changes_mem(n, lst[1::],memo)
else:
if (n,lst) not in memo:
memo[(n,lst)]=find_num_changes_mem(n-lst[0],lst,memo)+find_num_changes_mem(n,lst[1::],memo)
return memo(n,lst)
print(find_num_changes_mem(5, [1,2,5,6], memo=None))
最簡單的解決方案是使用元組而不是列表,並將對列表sort
方法的調用替換為對sorted
后的 function 的調用:
def find_num_changes_mem(n, lst, memo=None):
lst = tuple(sorted(lst,reverse=True))
if n<0:
return 0
if len(lst)==0:
if n==0:
return 1
else:
return 0
if memo==None:
memo={}
if lst[0]>n:
return find_num_changes_mem(n, lst[1::],memo)
else:
if (n,lst) not in memo:
memo[(n,lst)]=find_num_changes_mem(n-lst[0],lst,memo)+find_num_changes_mem(n,lst[1::],memo)
return memo[(n,lst)]
print(find_num_changes_mem(5, (1,2,5,6), memo=None)) #prints 4
return memo(n,lst)
中還有一個錯誤 - 通過添加[,]
修復
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.