Python - Entfernen Sie ein element aus einer Liste von strings, ist ein Teilstring von einem anderen element
Also beginnend mit einer Liste von strings, wie unten
string_list = ['rest', 'Ruhe', 'Aussehen', 'sah', 'er', 'spucken']
Möchte ich entfernen, ein element aus der Liste, das ist ein Teilstring von einem anderen element, indem das Ergebnis zum Beispiel...
string_list = ['Ruhe', 'sah', 'spucken']
Ich habe einige code, der acheives dazu, aber es ist peinlich hässlich und wahrscheinlich unnötig Komplex. Gibt es eine einfache Möglichkeit, dies zu tun in Python?
- mal sehen, die peinlich hässliche version. es wird ein guter Eisbrecher...
- und ich habe noch nie jemanden gesehen, lächerlich gemacht, für Ihren code, eine Frage
- Stellte ich eine ähnliche Frage wie der andere Tag stackoverflow.com/questions/21653585/...
- Eine ähnliche Frage mit möglicherweise schneller Lösungen gefunden werden können hier
InformationsquelleAutor Matt Fisher | 2014-02-12
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Baustein: substring.
Können Sie
in
zu überprüfen:Weiter, wir wählen die naive Methode, eine neue Liste zu erstellen. Fügen wir die Elemente nacheinander in die neue Liste zu testen, ob ein Teilstring oder nicht.
Können Sie beschleunigen, indem Sie Sie Sortieren, reduzieren Sie die Anzahl der Vergleiche (nachdem alle, eine längere Zeichenfolge kann nie einen Teilstring ein, die kürzer/gleich der Länge von string):
Hier ist eine mögliche Lösung:
druckt:
Hinweis: ich erstelle ein set (mit einem generator-Ausdruck) zu entfernen, die möglicherweise doppelte Wörter, wie es scheint, die Reihenfolge spielt keine Rolle.
Anderen one-liner:
sollte relativ gut lesbar, nur nicht, dass pythonic.
TypeError: object of type 'filter' has no len()
. Nur müssen wrapfilter
mitlist
:len(list(filter(lambda x: string in x,string_list)))
.string_list
hash-Duplikate z.B.['apple', 'apple']
. Dies wird eine leere Liste zurück, statt['apple']
. Dieses Verhalten kann oder kann nicht sein wollten.Hier ist eine Methode:
Es nutzt die Tatsache, dass wir können leicht prüfen, ob ein string a substring eines anderen durch die Verwendung der
in
Betreiber. Im wesentlichen geht durch jede saite, es prüft, ob ein substring des anderen, und fügt sich zu einer output-Liste, wenn es nicht so ist.Dieser druckt
['resting', 'looked', 'split']
Hier ist ein one-liner, die tut, was Sie wollen:
Beispiel:
Hier ist ein un-optimalen Weg, nur verwenden, wenn die Listen sind klein:
Hier ist der effizienteste Weg, es zu tun (bezogen auf die oben genannten Lösungen 😉 ), da dieser Ansatz reduziert die Anzahl der Vergleiche zwischen den Listen-Elementen eine Menge. Wenn ich eine riesige Liste, ich würde auf jeden Fall gehen mit diesem und natürlich können Sie morph-diese Lösung in eine lambda-Funktion, um es zu klein Aussehen:
Ausgabe:
Hoffe, es hilft !
Hier ist ein weiterer Weg, es zu tun. Vorausgesetzt, Sie haben eine sortierte Liste, mit zu beginnen und Sie nicht zu tun haben, die sieben platzierte, wir können wählen Sie einfach die längsten Zeichenfolgen in einem Durchgang: