2017-03-02 50 views
2

我正在嘗試編寫一個Python函數one_mode(l),它需要一個非空列表l並返回一個具有模式和模式頻率的對。 (如果有幾種模式,任意一個可以返回。)雖然查找模式不可能的類型錯誤

到目前爲止,我有...

from scipy import stats 
def one_mode(l): 
    return stats.mode(l) 

其作品爲以下測試:

one_mode([5, 6, 7, 5]) == (5,2) 

但不爲測試:

one_mode([5, 6, 7, 5, 6]) in {(5, 2), (6, 2)} 

在這種情況下,它給了我

unhashable類型: 'numpy.ndarray'

有沒有使用我當前的代碼解決這個辦法?

+0

嘗試使用'列表「,而不是」集合「。所以這就是'[(5,2),(6,2)]' –

+1

或者將'one_model(l)'轉換成一個普通的元組(它可以被哈希) – Julien

回答

1

如果強制stats.mode一個元組的結果,你的查詢將工作:

代碼:

from scipy import stats 
def one_mode(l): 
    mode = stats.mode(l) 

    # return first mode results as tuple 
    return mode[0][0], mode[1][0] 

測試代碼:

assert one_mode([5, 6, 7, 5]) == (5, 2) 
assert one_mode([5, 6, 7, 5, 6]) in {(5, 2), (6, 2)}