Elegante Möglichkeit, Elemente in einer Liste zu löschen, die keine Teilstrings in einer anderen Liste enthalten

8

Vor kurzem stieß ich auf dieses Problem:

Sagen Sie, es gibt eine Liste von etwas, das ich bearbeiten möchte:

%Vor%

Und ich möchte etwas ausschließen, indem ich eine andere Liste verwende, zum Beispiel:

%Vor%

Die process_list sollte so aussehen, nachdem ich die exclude_list auf sie angewendet habe (jedes process_list-Element, das eine sub enthält:

) %Vor%

oder wenn die exclude_list ist: exclude_list=["pen","banana"]

Die process_list sollte dies sein, nachdem der Filter angewendet wurde:

%Vor%

Was ich zuerst versuchte, war:

%Vor%

Natürlich funktionierte das nicht, weil das Entfernen von Elementen aus der Liste während der Iteration mit einer for -Schleife nicht erlaubt ist. Der Code entfernte nur die erste Übereinstimmung und stoppte dann.

Also habe ich einen Weg gefunden, dies mit einer anderen Liste zu tun:

%Vor%

Es funktioniert, aber meine Eingeweide sagen mir, dass es vielleicht einen eleganteren Weg gibt. Jetzt muss eine andere Liste zum Speichern des Namens gelöscht werden. Irgendwelche Ideen?

    
zyc 24.11.2016, 16:21
quelle

6 Antworten

14

Sie können den Ausdruck Listenverständnis mithilfe von all() Filter als:

%Vor%

In Bezug auf Ihre Aussage:

  

Natürlich funktionierte das nicht, weil das Entfernen von Elementen aus der Liste beim Iterieren mit einer for-Schleife nicht erlaubt ist. Der Code entfernte nur die erste Übereinstimmung und stoppte dann.

Sie könnten die Kopie der Liste wie folgt durchlaufen haben:

%Vor%     
Moinuddin Quadri 24.11.2016, 16:27
quelle
4

Zusätzlich können Sie auch reguläre Ausdrücke wie z. B.

verwenden %Vor%     
segevara 24.11.2016 17:19
quelle
2

Verwenden Sie os.path.basename , um den Basisnamen von Pfadnamen zu erhalten. Verwenden Sie die integrierte Funktion all , um zu überprüfen, ob der Basisname nicht in% co_de enthalten ist %.

%Vor%     
SparkAndShine 24.11.2016 16:31
quelle
1
%Vor%     
blue_note 24.11.2016 16:30
quelle
1

Ein anderer Ansatz, um zu erreichen, was Sie wollen, ist wie folgt:

%Vor%

Ausgabe:

%Vor%     
ettanany 24.11.2016 17:01
quelle
0

Wenn Sie direkt mit process_list und dem Listenverständnis arbeiten wollen, sollten Sie mit einer Kopie arbeiten, die wie folgt erstellt wird: process_list [:]

%Vor%     
dima 24.11.2016 16:43
quelle

Tags und Links