In Python kann der Listentyp kein Wörterbuchschlüssel sein.
key = [1, 2, 3]
table = {key: 1} #Error
Der Grund ist, dass der Listentyp seinen Status ändern kann. Zum Beispiel
key1 = [1]
key2 = [2]
table = {key1: 1, key2: 2}
key1[0] = 2
Es wäre ein Problem, wenn Sie so etwas tun könnten. Aber ich möchte das Array als Schlüssel verwenden! Verwenden Sie in diesem Fall Tupel.
Es gibt Numpy und Sympy als Bibliotheken, die ihre eigenen Arrays verarbeiten. Was ist die Behandlung in diesen? Ob ein Objekt als Schlüssel verwendet werden kann oder nicht, hängt davon ab, ob es eine `` `hash``` -Funktion gibt oder nicht. Schauen wir uns das an.
from sympy import Matrix, ImmutableMatrix
import numpy as np
# sympy
Matrix([1, 2]).__hash__ # None
ImmutableMatrix([1, 2]).__hash__ # not None
# numpy
a = np.array([1, 2])
a.__hash__ # None
a.flags.writeable = False
a.__hash__ # None
Es war also nutzlos, auch wenn es nicht mit Numpy beschreibbar war. Nun, es ist natürlich, weil es zurückgegeben werden kann. .. (Übrigens scheint es, dass Sie mit as_immutable von sympy usw. kopieren können. Selbst wenn Sie Änderungen am Original vornehmen, ändert sich das Ergebnis nicht.)
Recommended Posts