Esiste un modo consigliato di eseguire più sostituzioni di stringhe oltre a fare "sostituisci" concatenamento su una stringa (ad es. Text.replace (a, b) .replace (c, d). sostituire (e, f) ...)? Come implementeresti, ad esempio, una funzione veloce che si comporta come htmlspecialchars di PHP in Python?Implementazione più rapida per eseguire più sostituzioni di stringhe in Python
Ho confrontato (1) più metodo "replace", (2) il metodo di espressione regolare e (3) il metodo di Matt Anderson.
con n = 10 prove, il risultato è venuto nel modo seguente:
su 100 caratteri:
TIME: 0 ms [ replace_method(str) ] TIME: 5 ms [ regular_expression_method(str, dict) ] TIME: 1 ms [ matts_multi_replace_method(list, str) ]
su 1000 caratteri:
TIME: 0 ms [ replace_method(str) ] TIME: 3 ms [ regular_expression_method(str, dict) ] TIME: 2 ms [ matts_multi_replace_method(list, str) ]
On 10000 caratteri:
TIME: 3 ms [ replace_method(str) ] TIME: 7 ms [ regular_expression_method(str, dict) ] TIME: 5 ms [ matts_multi_replace_method(list, str) ]
Acceso 100000 personaggi:
TIME: 36 ms [ replace_method(str) ] TIME: 46 ms [ regular_expression_method(str, dict) ] TIME: 39 ms [ matts_multi_replace_method(list, str) ]
On 1000000 personaggi:
TIME: 318 ms [ replace_method(str) ] TIME: 360 ms [ regular_expression_method(str, dict) ] TIME: 320 ms [ matts_multi_replace_method(list, str) ]
Su 3.687.809 caratteri:
TIME: 1.277524 sec [ replace_method(str) ] TIME: 1.290590 sec [ regular_expression_method(str, dict) ] TIME: 1.116601 sec [ matts_multi_replace_method(list, str) ]
quindi complimenti a Matt per battere il metodo più 'sostituire' su un gran stringa di input .
Qualcuno ha idee per batterlo su una stringa più piccola?
Buona discussione qui http://stackoverflow.com/questions/3367809/efficiently-carry-out-multiple-string-replacements-how-to-create-lookup-table –
Tim, solo il commento utile sulla pagina è uno di Alex. Fornisce un esempio per il metodo di sostituzione delle espressioni regolari lineari che ho verificato essere più lento su un documento di dimensioni 3,5 M con 5 coppie di sostituzioni. Quindi non mi fornisce una nuova idea. – OTZ
Richiede che il risultato della prima sostituzione sia disponibile per la partecipazione alla sostituzione successiva (come nel vostro esempio di concatenamento sostitutivo)? O vuoi che tutte le sostituzioni operino solo sul testo originale? Se quest'ultimo, hai in mente qualcosa su come dare la priorità a loro se la sovrapposizione o il conflitto in altro modo? –