Mehrere Vorkommen einer Zeichenfolge in einer Zeichenfolge in Python finden
Wie finde ich mehrere vorkommen einer Zeichenfolge innerhalb eines Strings in Python? Bedenken Sie:
>>> text = "Allowed Hello Hollow"
>>> text.find("ll")
1
>>>
Also das erste vorkommen von ll
1 wie erwartet. Wie finde ich das nächste vorkommen?
Gleiche Frage gilt für eine Liste. Bedenken Sie:
>>> x = ['ll', 'ok', 'll']
Wie finde ich alle ll
mit Ihren Indizes?
InformationsquelleAutor der Frage user225312 | 2010-10-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mithilfe von regulären Ausdrücken, die Sie verwenden können,
re.finditer
zu finden, die alle (nicht-überlappende) Ereignisse:Alternativ, wenn Sie nicht wollen, dass die Aufwand von regulären Ausdrücken können Sie auch mehrfach verwenden
str.finden
um die nächsten index:Dies funktioniert auch für Listen und anderen Sequenzen.
InformationsquelleAutor der Antwort poke
Ich denke was du suchst ist
string.count
Hoffe, das hilft
HINWEIS: diese erfasst nur nicht-überlappende Ereignisse
InformationsquelleAutor der Antwort inspectorG4dget
Für die Liste B. verwenden Sie ein Verständnis:
Ebenso für Streicher:
listet die angrenzenden läuft "ll', die möglicherweise oder möglicherweise nicht, was Sie wollen:
InformationsquelleAutor der Antwort bstpierre
FWIW, hier sind ein paar nicht-RE alternativen, die ich denke, sind ordentlicher als Sack ' s Lösung.
Den ersten verwendet
str.index
und Prüfungen fürValueError
:Zweiten tests verwendet
str.find
und Prüfungen für die sentinel von-1
mithilfeiter
:Anzuwenden diese Funktionen, um eine Liste, Tupel oder andere iterierbar von Zeichenfolgen, die Sie verwenden können, eine übergeordnete Funktion —eine, die eine Funktion als eines der Argumente— wie zum Beispiel diese:
InformationsquelleAutor der Antwort intuited
Für eine Liste Beispiel:
Wenn Sie wollten, dass alle Elemente in einer Liste enthalten ist, wird die 'll', könnte man auch tun.
InformationsquelleAutor der Antwort chauncey
InformationsquelleAutor der Antwort ghostdog74
Ganz neu in der Programmierung im Allgemeinen und die Arbeit durch ein online-tutorial. Ich wurde gebeten, tun dies auch, aber nur mit den Methoden die ich bisher kennen gelernt hatte (grundsätzlich strings und loops). Nicht sicher, ob dies fügt hier einen Wert, und ich weiß, das ist nicht, wie Sie es tun würde, aber ich habe es mit dieser zu arbeiten:
InformationsquelleAutor der Antwort Aaron Semeniuk
Diese version sollte linear in der Länge der Zeichenfolge, und Sie sollten in Ordnung sein, solange die Sequenzen nicht zu repetitiv (in dem Fall können Sie ersetzen Sie die Rekursion mit einer while-Schleife).
bstpierre s list comprehension ist eine gute Lösung für kurze Sequenzen, aber sieht auf quadratische Komplexität und nie fertig, auf einem langen text, ich war mit.
Für eine zufällige Zeichenfolge von nicht-trivialen Länge, die zwei Funktionen das gleiche Ergebnis:
Aber die quadratische version ist etwa 300-mal langsamer
InformationsquelleAutor der Antwort beardc
Diesem Programm zählt die Anzahl aller Zeichenketten, auch wenn Sie überlappt werden, ohne die Verwendung von regex. Aber das ist eine naive Implementierung und für bessere Resultate im schlimmsten Fall ist es geraten, zu gehen, durch entweder-Suffix Baum, KMP und anderen string-matching-Daten-Strukturen und algorithmen.
InformationsquelleAutor der Antwort pmsh.93
Hier ist meine Funktion für die Suche mehrere vorkommen. Im Gegensatz zu den anderen Lösungen hier unterstützt Sie die optionale start-und end-Parameter für das schneiden, nur wie
str.index
:InformationsquelleAutor der Antwort Elias Zamaria
Einem einfachen iterativen code gibt eine Liste der Indizes, in denen der Teilstring vorkommt.
InformationsquelleAutor der Antwort FReeze FRancis
Teilen Sie die relative Positionen dann Summe aufeinander folgende zahlen in einer Liste und add (string-Länge * Ereignis-Ordnung) in der gleichen Zeit zu bekommen, wollte der string-Indizes.
InformationsquelleAutor der Antwort WaKo
Diese kann getan werden, in einer Linie mit Liste Verstehens:
Ähnliche Technik funktioniert für Listen:
InformationsquelleAutor der Antwort TripleD
Vielleicht nicht so Pythonic, aber etwas mehr selbsterklärend. Es gibt die position des Wortes sah in der ursprünglichen Zeichenfolge.
InformationsquelleAutor der Antwort Blas
Diese link erklärt, wie man das ganze in O(n) und beinhaltet eine Lösung in python als gut.
Wenn man weiter unten die Sätze zu 'Suffix-Bäume' Sie wäre in der Lage, das gleiche zu tun, wenn Sie hatte eine große Zeichenfolge, sondern wollte, um die Suche für die 1000 Muster.
InformationsquelleAutor der Antwort Abhishek Jebaraj
Ich denke, es gibt keine Notwendigkeit, um zu testen, für die Länge des Textes, nur immer wieder auf, bis es nichts mehr zu finden. Wie diese:
InformationsquelleAutor der Antwort rdo
Kann man es auch mit bedingter Liste Verständnis, wie diese:
InformationsquelleAutor der Antwort Stefan Gruenwald
Hatte ich zufällig gekommen, diese Idee gerade vor einer Weile. Mithilfe einer While-Schleife mit string-Spleiß-und string-Suche kann die Arbeit, auch für überlappende strings.
Ich bin ein amateur in der Python-Programmierung (Programmierung jeder beliebigen Sprache, eigentlich), und bin nicht sicher, welche anderen Probleme Sie haben könnte, aber ich denke, es ist in Ordnung arbeiten?
Ich denke, unteren() kann verwendet werden, irgendwo Sie es zu, wenn nötig.
InformationsquelleAutor der Antwort Mystearica Primal Fende