![](/img/trans.png)
[英]How to overcome TypeError: unhashable type: 'list'
[英]How to overcome TypeError: unhashable type: 'list' in this program
我正在嘗試計算頻率表的平均值。
現在直到打印出平均值,一切正常,但之后我不斷收到 TypeError: unhashable type: 'list'
直到這里程序很好:
import threading
import statistics
from statistics import mode
import numpy as np
print("Instructions:Enter a number than press ENTER until when fully completed")
ScoresNumber=[]
n = int(input("Entering amount of scores you want : "))
for i in range(0, n):
ele = int(input())
ScoresNumber.append(ele)
print("These are the scores for the Frequency table",ScoresNumber)
print("\n")
print("Now enter Frequency")
FrequencyNumber=[]
a = int(input("Entering amount of frequencies you want : "))
for i in range(0, a):
ele = int(input())
FrequencyNumber.append(ele)
print("These are the frequencies for the Frequency table",FrequencyNumber)
SumFrequencyNumber=sum(FrequencyNumber)
print("Sum of elements in frequency is :",SumFrequencyNumber)
print("\n")
print ("Now calculating FX wait....")
FX=[a * b for a, b in zip(FrequencyNumber,ScoresNumber)]
print("Calculated,This is the FX:",FX)
print("\n")
SumFX=sum(FX)
print("Sum of elements in FX is :",SumFX)
print("\n")
print("Final Output")
Mean=SumFX/SumFrequencyNumber
print("Mean is:",Mean)
問題發生的關鍵是:
def most_common(b):
return(mode(b))
ModeList=[[item for item, count in zip(ScoresNumber,FrequencyNumber) for i in range(count)]]
b=(ModeList)
print(most_common(b))
ScoresNumber.sort()
b=(ScoresNumber[-1])
c=(ScoresNumber[0])
Range=b-c
print("Range is:",Range)
整個程序:
import threading
import statistics
from statistics import mode
import numpy as np
print("Instructions:Enter a number than press ENTER until when fully completed")
ScoresNumber=[]
n = int(input("Entering amount of scores you want : "))
for i in range(0, n):
ele = int(input())
ScoresNumber.append(ele)
print("These are the scores for the Frequency table",ScoresNumber)
print("\n")
print("Now enter Frequency")
FrequencyNumber=[]
a = int(input("Entering amount of frequencies you want : "))
for i in range(0, a):
ele = int(input())
FrequencyNumber.append(ele)
print("These are the frequencies for the Frequency table",FrequencyNumber)
SumFrequencyNumber=sum(FrequencyNumber)
print("Sum of elements in frequency is :",SumFrequencyNumber)
print("\n")
print ("Now calculating FX wait....")
FX=[a * b for a, b in zip(FrequencyNumber,ScoresNumber)]
print("Calculated,This is the FX:",FX)
print("\n")
SumFX=sum(FX)
print("Sum of elements in FX is :",SumFX)
print("\n")
print("Final Output")
Mean=SumFX/SumFrequencyNumber
print("Mean is:",Mean)
def most_common(b):
return(mode(b))
ModeList=[[item for item, count in zip(ScoresNumber,FrequencyNumber) for i in range(count)]]
b=(ModeList)
print(most_common(b))
ScoresNumber.sort()
b=(ScoresNumber[-1])
c=(ScoresNumber[0])
Range=b-c
print("Range is:",Range)
我不斷收到錯誤TypeError: unhashable type: 'list'
我知道我無法將 zip 兩個列表放在一起並比較每個元素,但我正在嘗試解決問題。 我想知道我是否在某個地方犯了錯誤。
TypeError: unhashable type: <whatever>
通常在您嘗試使用不可散列的東西作為 hash 索引數據結構(例如dict
、 set
)中的鍵時發生。
查看您可能在哪里使用 list 作為 hash 表索引,唯一可能這樣做的部分是使用mode
。 通常使用 hash 表來計算頻率。 讓我們測試一下。
In [1]: from statistics import mode
In [2]: mode([1,1,2])
Out[2]: 1
In [3]: mode([[1,1,2]])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-23d99259e845> in <module>
----> 1 mode([[1,1,2]])
/usr/lib/python3.8/statistics.py in mode(data)
556 """
557 data = iter(data)
--> 558 pairs = Counter(data).most_common(1)
559 try:
560 return pairs[0][0]
/usr/lib/python3.8/collections/__init__.py in __init__(self, iterable, **kwds)
550 '''
551 super(Counter, self).__init__()
--> 552 self.update(iterable, **kwds)
553
554 def __missing__(self, key):
/usr/lib/python3.8/collections/__init__.py in update(self, iterable, **kwds)
635 super(Counter, self).update(iterable) # fast path when counter is empty
636 else:
--> 637 _count_elements(self, iterable)
638 if kwds:
639 self.update(kwds)
TypeError: unhashable type: 'list'
是的,我們 go... mode
使用collections.Counter
這是一個dict
。
所以你只需要避免在mode
中使用列表列表。 不知道為什么你首先要這樣做,但如果你需要保持一個嵌套的可迭代,你可以用tuple
替換內部(注意:你以后將無法修改元組)。 或者,嘗試將您的數據扁平化為單個可迭代對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.