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]
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.
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:
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%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.
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
Dieser Code funktioniert, vorausgesetzt, Sie haben sortierte Listen. Es arbeitet in linearer Zeit und nicht quadratisch wie viele der anderen gegebenen Lösungen.
%Vor%Einfach, aber nicht besonders effizient:)
%Vor%Oder mit "just loops"
%Vor%Tags und Links python python-2.7