Vergleichen zweier Listen und nur Drucken der Unterschiede? (XORing zwei Listen)

8

Ich versuche eine Funktion zu erstellen, die zwei Listen aufnimmt und die Liste zurückgibt, die nur die Unterschiede der beiden Listen enthält.

Beispiel:

%Vor%

Das Ergebnis sollte [4,5,7,8]

ausgeben

Die Funktion bisher:

%Vor%

Die erste for-Schleife sortiert sie, die zweite löscht die Duplikate. Problem ist das Ergebnis ist [1,2,4,5,7,8,9] nicht [4,5,7,8] , sodass die Duplikate nicht vollständig entfernt werden? Was kann ich hinzufügen, um dies zu tun? Ich kann keine speziellen Module, .sort, set oder irgendetwas verwenden, nur Schleifen im Grunde.

    
user2314520 01.05.2013, 04:26
quelle

6 Antworten

12

Sie möchten grundsätzlich ein Element zu Ihrer neuen Liste hinzufügen, wenn es in einer anderen Liste vorhanden ist und nicht in einer anderen Liste vorhanden ist. Hier ist eine kompakte Schleife, die es tun kann. Für jedes Element in den zwei Listen (verketten Sie sie mit list1+list2 ) fügen wir ein Element hinzu, wenn es in keinem von ihnen vorhanden ist:

%Vor%

Sie können es leicht in einen unpythonischen Code mit expliziten Schleifen durch Elemente umwandeln, wie Sie es jetzt haben, aber ehrlich gesagt sehe ich keinen Punkt (nicht dass es darauf ankommt):

%Vor%     
sashkello 01.05.2013, 04:32
quelle
10

Verwenden Sie Set ist besser

%Vor%

Dank @DSM ist ein besserer Satz:

%Vor%

Diese beiden Aussagen sind identisch. Aber letzteres ist klarer.

Update: Entschuldigung, ich habe die letzte Anforderung nicht gesehen: kann set nicht verwenden. Soweit ich sehe, ist die Lösung von @sashkello die beste.

    
Sheng 01.05.2013 04:31
quelle
5

Hinweis: Dies ist wirklich unpythonisch und sollte nur als Hausaufgabe verwendet werden:)

Nachdem Sie beide Listen sortiert haben, können Sie wie folgt Duplikate finden:

1) Platziere Iteratoren am Anfang von A und B

2) Wenn Aitr größer als Bitr ist, wird Bitr nach dem Platzieren von Bitrs Wert in die Rückgabeliste verschoben.

3) Andernfalls, wenn Bitr größer als Aitr ist, wird Aiter nach dem Platzieren von Aitrs Wert in der Rückgabeliste vorgezogen

4) Sonst haben Sie ein Duplikat gefunden, Aitr und Bitr vorziehen

    
Patashu 01.05.2013 04:30
quelle
3

Dieser Code funktioniert, vorausgesetzt, Sie haben sortierte Listen. Es arbeitet in linearer Zeit und nicht quadratisch wie viele der anderen gegebenen Lösungen.

%Vor%     
Paul Hankin 01.05.2013 06:33
quelle
2

Probieren Sie das aus,

%Vor%     
Satish Bellapu 29.12.2016 04:30
quelle
1

Einfach, aber nicht besonders effizient:)

%Vor%

Oder mit "just loops"

%Vor%     
John La Rooy 01.05.2013 05:04
quelle

Tags und Links