In Python wird die Zeichenfolge nicht berücksichtigt
Hier ist, wie ich prüfen, ob mystring
beginnt mit einigen string:
>>> mystring.lower().startswith("he")
True
Das problem ist, dass mystring
ist sehr lange (Tausende von Zeichen), so dass die lower()
Betrieb nimmt eine Menge Zeit.
FRAGE: gibt es einen effizienteren Weg?
Mein erfolgloser Versuch:
>>> import re;
>>> mystring.startswith("he", re.I)
False
InformationsquelleAutor der Frage Nicolas Raoul | 2012-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man mit einem regulären Ausdruck wie folgt:
Auf eine 2000-Zeichen-string, dieser ist etwa 20x mal schneller als
lower()
:Wenn entsprechen Sie dem gleichen Präfix, immer wieder, pre-kompilieren der regex einen großen Unterschied machen kann:
Kurz Präfixe, schneiden Sie das Präfix aus der Zeichenkette vor der Umwandlung in Kleinbuchstaben, könnte sogar noch schneller:
Relativen timings dieser Ansätze wird, hängt natürlich von der Länge des Präfix. Auf meiner Maschine den Break even Punkt scheint zu sein, etwa sechs-Zeichen, die ist, wenn die vorkompilierten regex wird die Schnellste Methode.
In meinen Experimenten jedes Zeichen einzeln, könnte sogar noch schneller:
Jedoch, diese Methode funktioniert nur für Präfixe, die bekannt sind, wenn Sie den code schreiben, und eignet sich nicht für längere Präfixe.
InformationsquelleAutor der Antwort NPE
Wie wäre es damit:
InformationsquelleAutor der Antwort inspectorG4dget
Je nach Leistung .lower(), wenn Präfix war klein genug, könnte es schneller sein, um zu überprüfen, Gleichheit mehrfach:
Timing (mit der gleichen Zeichenfolge wie NPE):
Im Vergleich zur bestehenden Methode:
(Das ist schrecklich, natürlich, aber wenn der code ist sehr performance-kritisch, dann könnte es sein, es lohnt sich)
InformationsquelleAutor der Antwort Alex L
Keine der gegebenen Antworten ist tatsächlich korrekt, sobald Sie alles in Betracht ziehen, die außerhalb des ASCII-Bereichs.
Beispielsweise in der groß-und Kleinschreibung-Vergleich
ß
sollte, als gleich zuSS
wenn Sie nach Unicode case mapping-Regeln.Um richtige Ergebnisse zu erzielen, die einfachste Lösung ist die Installation von Python ist regex Modul folgt dem standard:
InformationsquelleAutor der Antwort Voo