簡體   English   中英

不可散列的類型:python 中的“列表”

[英]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.

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