¿Hay alguna manera recomendada de hacer varias sustituciones de cadenas que no sea 'reemplazar' el encadenamiento en una cadena (es decir, text.replace (a, b) .replace (c, d). reemplazar (e, f) ...)? ¿Cómo podría, por ejemplo, implementar una función rápida que se comporte como las llamadas htmlspecialchars de PHP en Python?Implementación más rápida para hacer varias sustituciones de cadenas en Python
Comparé (1) el método múltiple de 'reemplazar', (2) el método de expresión regular y (3) el método de Matt Anderson.
con n = 10 carreras, llegaron los resultados como sigue:
en 100 caracteres:
TIME: 0 ms [ replace_method(str) ] TIME: 5 ms [ regular_expression_method(str, dict) ] TIME: 1 ms [ matts_multi_replace_method(list, str) ]
En 1000 caracteres:
TIME: 0 ms [ replace_method(str) ] TIME: 3 ms [ regular_expression_method(str, dict) ] TIME: 2 ms [ matts_multi_replace_method(list, str) ]
En 10.000 caracteres:
TIME: 3 ms [ replace_method(str) ] TIME: 7 ms [ regular_expression_method(str, dict) ] TIME: 5 ms [ matts_multi_replace_method(list, str) ]
Encendido 100000 personajes:
TIME: 36 ms [ replace_method(str) ] TIME: 46 ms [ regular_expression_method(str, dict) ] TIME: 39 ms [ matts_multi_replace_method(list, str) ]
En 1,000,000 caracteres:
TIME: 318 ms [ replace_method(str) ] TIME: 360 ms [ regular_expression_method(str, dict) ] TIME: 320 ms [ matts_multi_replace_method(list, str) ]
En 3,687,809 caracteres:
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) ]
así que felicitaciones a Matt para vencer el método de múltiples 'reemplazar' en una cadena de entrada bastante grande .
¿Alguien tiene ideas para golpearlo en una cuerda más pequeña?
Buena discusión aquí http://stackoverflow.com/questions/3367809/efficiently-carry-out-multiple-string-replacements-how-to-create-lookup-table –
Tim, único comentario útil en la página es uno por Alex. Él da un ejemplo para el método de sustitución lineal de la expresión regular que he verificado que es más lento en un documento de tamaño de 3.5M con 5 pares de sustitución. Entonces no me da una nueva idea. – OTZ
¿Necesita que el resultado de la primera sustitución esté disponible para participar en la siguiente sustitución (como lo haría en su ejemplo de cambio de cadena)? ¿O desea que todas las sustituciones operen únicamente en el texto original? Si es lo último, ¿tiene algo en mente sobre cómo priorizarlos si la superposición o de lo contrario entran en conflicto? –