So teilen Sie eine Liste auf einem Elementtrennzeichen [duplizieren]

9

Gibt es prägnante und elegante Möglichkeiten, eine Liste in Python durch ein begrenzendes Element in eine Liste von Unterlisten aufzuteilen, so dass ['a', 'delim', 'b'] - & gt; [['a'], ['b']] ?

Hier ist das Beispiel:

%Vor%

Arbeitsbeispiele, die zu komplex erscheinen

Ich habe Dokumentationen und verwandte Fragen zu stackoverflow - viele davon sind im folgenden verwiesen - die meine Frage nicht beantworteten, und fasse unten meine Forschung zusammen: mehrere Ansätze, die tun erzeugen die gewünschte Ausgabe, sind aber ausführlich und kompliziert, und was passiert (das Aufteilen einer Liste) ist nicht sofort ersichtlich - du musst wirklich schielen.

Gibt es bessere Wege? Ich interessiere mich hauptsächlich für die Lesbarkeit für Anfänger (z. B. Unterricht), kanonische / "pythonische" Ansätze und sekundär für die effizientesten Ansätze (z. B. Zeitgeschwindigkeit). Idealerweise würden Antworten sowohl Python 2.7 als auch 3.x adressieren.

mit bedingten .append ()

Durchlaufen Sie die Liste und hängen Sie sie entweder an die letzte Ausgabeliste an oder fügen Sie eine neue Ausgabeliste hinzu. Basierend auf einem Beispiel, das das Trennzeichen enthält , aber geändert, um es auszuschließen. Ich bin mir nicht sicher, wie man es zu einem One-Liner macht, oder ob das überhaupt wünschenswert ist.

%Vor%

mit itertools.groupby

Kombiniere itertools.groupby mit Listenverständnis. Viele Antworten enthalten Delimeter , diese basieren auf denen, die Delimeter ausschließen .

%Vor%

mit Slicing auf Indizes

Einige verwandte Fragen haben besprochen, wie man nach der Verwendung von .index () Slicing verwendet - allerdings konzentrieren sich die Antworten normalerweise darauf, nur den ersten Index zu finden. . Man kann diesen Ansatz erweitern, indem man zuerst eine Liste von Indizes findet und dann eine selbst gezippte Liste durchläuft, um die Bereiche zu teilen.

%Vor% Wie alle Ansätze, die ich gefunden habe, scheint dies jedoch eine sehr komplexe Art zu sein, eine einfache Split-on-Delimiter-Operation zu implementieren.

Vergleich mit String-Splitting

Im Vergleich und nur als Modell, hier ist eine funktionierende, prägnante und elegante Art zu spalten eine Zeichenfolge in eine Liste von Teilzeichenfolgen durch ein Trennzeichen.

%Vor%

HINWEIS: Ich verstehe, dass es keine split -Methode für Listen in Python gibt, und ich frage nicht nach dem Teilen einer Zeichenfolge. Ich frage auch nicht, ob ich Element-Strings in neue Elemente aufteilen soll.

    
JeremyDouglass 05.12.2017, 20:30
quelle

2 Antworten

-1

Ich bin mir nicht sicher, ob es präziser oder "eleganter" wäre, aber wie wäre es damit:

%Vor%

und wenn Sie es wirklich in 1 Zeile wollen:

%Vor%     
pookie 05.12.2017 20:34
quelle
-3

oder das:

%Vor%     
user508402 05.12.2017 20:37
quelle

Tags und Links