Python-Listensortierung abhängig davon, ob sich Elemente in einer anderen Liste befinden

8

Sagen Sie, ich habe eine Liste:

%Vor%

und eine zweite Liste:

%Vor%

Was ist der beste Weg, um Liste A so zu sortieren, dass alles, was zu einem Gegenstand in Liste B passt, am Anfang erscheint, so dass das Ergebnis lauten würde:

%Vor%     
Ashy 16.05.2013, 11:18
quelle

5 Antworten

11
%Vor%

Wie das funktioniert:

sorted sortiert ein Interable basierend auf dem Ergebnis von key(element) für jedes Element (der Standardwert für key ist None , was dazu führt, dass die Sortierung direkt auf den Elementen basiert).

In unserem Fall gibt das Lambda lambda e: e not in B entweder True zurück, wenn e nicht in B ist, oder False if e ist in B . Die Elemente mit False werden nach vorne sortiert, und Sie erhalten Ihr Ergebnis. Wie demonstriert durch:

%Vor%     
HennyH 16.05.2013, 11:20
quelle
3

Viele dieser Antworten verwenden explizit die Set-Logik. Aber Python hat es eingebaut. Wenn, wie du sagst, die Reihenfolge keine Rolle spielt, solange die B Teile zuerst kommen, wird dies den Rest erledigen:

%Vor%

Dies setzt voraus, dass (wie in Ihrem Beispiel) keine doppelten Werte vorhanden sind. Wenn dies der Fall ist, verwenden Sie eine der Listenverständnisantworten.

    
kojiro 16.05.2013 11:37
quelle
2
%Vor%     
defuz 16.05.2013 11:21
quelle
2
%Vor%     
wim 16.05.2013 11:45
quelle
0

Hinweis: Dies entfernt doppelte Werte - funktioniert aber mit eindeutigen Schlüsseln.

Wenn beide bereits sortiert sind (oder anders angeordnet sind, wie Sie möchten), können Sie Folgendes verwenden:

%Vor%

Ansonsten wenden Sie einfach sorted auf A , B oder beide ...

an     
Jon Clements 16.05.2013 11:27
quelle

Tags und Links