Neugierig zu finden, wenn Menschen viel schneller als meine Implementierung (mit reinem Python, oder was auch immer, aber nur für Sie) tun können.Entfernen Sie Zeichen in Bereichen von einer Zeichenfolge
sentence = "This is some example sentence where we remove parts"
matches = [(5, 10), (13, 18), (22, 27), (38, 42)]
Das Ziel ist, innerhalb dieser Bereiche zu entfernen. Z.B. Die Zeichen bei den Indizes (5, 6, 7, 8, 9) sollten im Rückgabewert für die Übereinstimmung (5, 10) weggelassen werden.
Meine Implementierung:
def remove_matches(sentence, matches):
new_s = ''
lbound = 0
for l, h in matches:
news += sentence[lbound:l]
lbound = h
new_s += sentence[matches[-1][1]:]
return new_s
Ergebnis: 'This me le sce where weove parts'
Beachten Sie, dass die Spiele nie überlappen, können Sie nutzen diese Tatsache machen.
Eigentlich ist meine Hauptfrage einfach: Können wir es nicht irgendwie vektorisiert machen? Ich bin mir sicher, dass das numpig sein könnte, aber ich bezweifle, dass das in diesem Fall effizienter wäre.
Benchmarks:
PascalvKooten: 1000000 loops, best of 3: 1.34 µs per loop
Ted Klein Bergman (1): 1000000 loops, best of 3: 1.59 µs per loop
Ted Klein Bergman (2): 100000 loops, best of 3: 2.58 µs per loop
Prune: 100000 loops, best of 3: 2.05 µs per loop
njzk2: 100000 loops, best of 3: 3.19 µs per loop
Wenn Sie uns Ihre Benchmarks geben, könnten wir in der Lage sein, zu prüfen, ob wir etwas schneller haben. –
@AkshatMahajan: dann genügt es, seinen Code zu nehmen und eine schnellere Maschine zu verwenden. –
@YvesDaoust: Durch diese Logik können Sie auch überhaupt kein Profil erstellen. –