python iteriert beim Vergleich von Items über die beiden Listen

8

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.

%Vor%     
user739807 19.08.2011, 13:27
quelle

4 Antworten

4

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, wenn obj1 == obj2 wenn obj1.a == obj2.a and ob1.b == obj2.b , __hash__ sollte return 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.

%Vor%

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.

    
agf 19.08.2011, 14:00
quelle
3

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.

    
Thomas Orozco 19.08.2011 13:56
quelle
1

Versuchen Sie Folgendes:

%Vor%

BEARBEITEN: aktualisierte Antwort

    
Constantinius 19.08.2011 13:31
quelle
-1

Wie wäre es damit:

%Vor%     
Spencer Rathbun 19.08.2011 13:46
quelle

Tags und Links