Ich habe zwei Listen zB x = [1,2,3,4,4,5,6,7,7] y = [3,4,5,6,7,8,9,10]
, ich möchte beim Vergleichen von Items über die zwei Listen iterieren. Für diejenigen, die übereinstimmen, möchte ich eine Funktion aufrufen und sie aus den Listen entfernen, in diesem Beispiel sollte ich mit x = [1,2] und y = [8,9,10] enden. Sets funktionieren aufgrund meines Datentyps und des Vergleichsoperators nicht für dieses Problem.
Bearbeiten: Nachdem ich festgestellt habe, dass die Person, die die Frage gestellt hat, einfach nicht von __hash__
wusste, habe ich diese Information in einem Kommentar angegeben:
Um Sets zu verwenden, implementieren Sie
__hash__
. Also, wennobj1 == obj2
wennobj1.a == obj2.a and ob1.b == obj2.b
,__hash__
solltereturn hash((self.a, self.b))
sein und Ihre Sätze werden wie erwartet funktionieren.
Das löste ihr Problem, und sie wechselten zu Sets.
Der Rest dieser Antwort ist jetzt veraltet, aber es ist immer noch korrekt (aber schrecklich ineffizient), also werde ich es hier lassen.
Dieser Code macht, was Sie wollen. Am Ende sind newx
und newy
die nicht überlappenden Elemente von x
und y
speziell.
Allerdings weiß ich, ohne dass ich Ihren Code gesehen habe, dass dies der falsche Weg ist. Sie können es sicherlich mit Sets machen, aber wenn Sie nicht wollen, liegt es an Ihnen.
Ok, verwerfen Sie meinen Beitrag, ich habe den Punkt nicht gesehen, an dem Sie erwähnt haben, dass die Sets nicht funktionieren würden.
Wenn Sie jedoch mit etwas Arbeit fertig sind, sollten Sie möglicherweise Klassen verwenden, damit die Operatoren wie erwartet funktionieren .
Ich denke, der pythonistischste Weg ist die Verwendung von Mengen. Sie könnten dann tun:
%Vor%Ich denke, dass Sets auch effizienter sind als Listen für diese Art von Arbeit, wenn es um die Leistung geht (obwohl dies möglicherweise nicht Ihre oberste Priorität ist).
Als Nebenbemerkung können Sie auch Folgendes verwenden:
%Vor%Dadurch werden Elemente, die sich in x und y befinden, effektiv aus x und y entfernt.
Versuchen Sie Folgendes:
%Vor%BEARBEITEN: aktualisierte Antwort