Ich habe eine Liste von Listen :
%Vor%und ich möchte in eine Menge konvertieren, d. h. die Wiederholungslisten entfernen und daraus eine neue Liste erstellen, die nur die eindeutigen Listen enthält.
Im obigen Fall ist die erforderliche Antwort
%Vor% Aber wenn ich set(mat)
mache, gibt es mir einen Fehler
TypeError: nicht hashbarer Typ: 'list'
Können Sie bitte mein Problem lösen? Vielen Dank im Voraus!
Da die Listen änderbar sind, können sie nicht gehashed werden . Am besten ist es, sie in ein Tupel zu konvertieren und so ein Set zu bilden.
%Vor% Wir durchlaufen die mat
, eine Liste nach der anderen, wandeln diese in ein Tupel um (was unveränderlich ist, also sind set
s bei ihnen cool) und der Generator wird an die Funktion set
gesendet.
Wenn Sie das Ergebnis als Liste von Listen haben möchten, können Sie dasselbe erweitern, indem Sie das Ergebnis von set
Funktionsaufruf in Listen wie dieses
Listen sind veränderbar und daher nicht hashbar. Verwenden Sie stattdessen Tupel
%Vor%@ thefourtheyes Antwort zeigt deutlich das Problem, mit dem Sie bei nicht-hashbaren Datentypen konfrontiert waren, und die Art und Weise, wie Sie sie umgehen können, sodass Sie einen Satz erstellen und Duplikate entfernen können. Dies sollte für die meisten Probleme ausreichen, aber Ihre Frage erneut lesen
Im obigen Fall lautet die erforderliche Antwort [[1,2,3], [4,5,6], [7,8,9]].
Wenn die Reihenfolge wichtig ist, müssen Sie OrderedDict
verwenden %Vor%