2017-03-02 3 views
2

Ich versuche, eine Python-Funktion one_mode(l) zu schreiben, die eine nicht leere Liste l nimmt und ein Paar mit seinem Modus und der Häufigkeit des Modus zurückgibt. (Für den Fall, gibt es mehrere Modi, willkürlich zurückgeführt werden kann.)Unabnehmbarer Typ Fehler beim Suchen Modus

Bisher habe ich ...

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

, die für die folgenden Tests funktioniert:

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

Aber nicht für den Test:

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

In diesem Fall gibt es mir

unhashable Typ: 'numpy.ndarray'

Gibt es eine Möglichkeit, um dieses meine aktuellen Code?

+0

versuchen ein mit ' Liste', kein 'Set'. Also das ist '[(5, 2), (6, 2)]' –

+1

oder konvertiere 'one_model (l)' in ein einfaches Tupel (welches hashbar sein soll) – Julien

Antwort

1

Wenn Sie die Ergebnisse von stats.mode zu einem Tupel zwingen, wird Ihr Nachschlag arbeiten:

Code:

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] 

Testcode:

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