Различные методы - это O (n), но некоторые методы намного быстрее из-за разного коэффициента масштабирования.
Например, проверка времени показывает, что maketrans намного быстрее, чем методы OP.
Метод
def dwf(word):
" Filter method "
return ''.join((filter(lambda x: x.isalpha(), word)))
def dwr(word):
" Regex method "
return re.sub(r"\d+", '', word)
def trans(word):
" Maketrans method "
translation = str.maketrans("", "", string.digits)
return word.translate(translation)
Тестирование
Используйте timeit для измерения времени, так как оно самое надежное.
Настройка
Случайная строка в верхнем / нижнем регистре + цифры
import string
import random
N = 1000000 # Million characters
word = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(N))
Результаты
import timeit
Фильтр
%timeit dwf(word)
N = 1000 -> timeit: 280 us
N = 1 M -> timeit: 241 ms
Regex
%timeit dwr(word)
N = 1000 -> timeit: 84.6 us
N = 1 M -> timeit: 87.5 ms
Макетранс
%timeit trans(word)
N = 1000 -> timeit: 11.4 us
N = 1 M -> timeit: 3.78 ms
Заключение
При увеличении количества точек с 1К до 1М время фильтра и регулярных выражений увеличилось на ~ 1000 (линейное)
Макетранс увеличился всего на ~ 300, что означает, что он более эффективен при обработке больших строк .
С N = 1000
Maketrans is 24X filter
Maketrans is 7X Regex
С N = 1 М
Maketrans is 63X filter
Maketrans is 23X regex