Есть ли какой-либо рекомендуемый способ сделать несколько подстановок строк, кроме выполнения replace
цепочки строк (например, text.replace(a, b).replace(c, d).replace(e, f)...
)?Как бы вы, например, реализовали быструю функцию, которая ведет себя как PHP htmlspecialchars
в Python?
Я сравнил (1) метод множественного replace
, (2) метод регулярного выражения и (3)Метод Мэтта Андерсона.
При n = 10 прогонов результаты выглядят следующим образом:
На 100 символов:
TIME: 0 ms [ replace_method(str) ]
TIME: 5 ms [ regular_expression_method(str, dict) ]
TIME: 1 ms [ matts_multi_replace_method(list, str) ]
На 1000 символов:
TIME: 0 ms [ replace_method(str) ]
TIME: 3 ms [ regular_expression_method(str, dict) ]
TIME: 2 ms [ matts_multi_replace_method(list, str) ]
На 10000 символов:
TIME: 3 ms [ replace_method(str) ]
TIME: 7 ms [ regular_expression_method(str, dict) ]
TIME: 5 ms [ matts_multi_replace_method(list, str) ]
На 100000 символов:
TIME: 36 ms [ replace_method(str) ]
TIME: 46 ms [ regular_expression_method(str, dict) ]
TIME: 39 ms [ matts_multi_replace_method(list, str) ]
На 1000000 символов:
TIME: 318 ms [ replace_method(str) ]
TIME: 360 ms [ regular_expression_method(str, dict) ]
TIME: 320 ms [ matts_multi_replace_method(list, str) ]
На 3687809 символов:
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) ]
Так что поблагодарите Мэтта за избиение метода multi replace
на довольно большой входной строке.
У кого-нибудь есть идеи, как обыграть его на меньшей строке?