svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺

Как оптимизировать код на Python (поиск в строке)?

Есть такой код - ищет последовательность символов в строке, и возвращает True, если последовательность найдена:
if word in s:
    return True
else:
    return False


Очень просто и наглядно. Проблема в том, что этот участок вызывается программой несколько миллионов раз, и скорость его работы критична. Как можно это ускорить?

UPDATE:
Количество различных s не определено, количество различных word около 1000
  • Вопрос задан
  • 3176 просмотров
Решения вопроса 1
mututunus
@mututunus
Backend developer (Python, Golang)
Реализуйте более быстрый алгоритм. Можно на си, если хотите еще быстрее.
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D...
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@mayorovp
Проверка word in s сама по себе довольно оптимальная. Если вам надо оптимизировать алгоритм для поиска многих подстрок одновременно - то взгляните на алгоритм Ахо-Корасик
Ответ написан
Комментировать
iximiuz
@iximiuz
Если количество уникальных word не слишком велико, то можно сделать "index" по ним. Тогда последующий поиск такой же подстроки будет происходить за O(1), а не за O(n) как это происходит с оператором in. Минус - оверхед по памяти на индекс.

def in_checker(word, s):
    if not hasattr(in_checker, '_index'):
        in_checker._index = {}
    if word not in in_checker._index:
        in_checker._index[word] = word in s
    return in_checker._index[word]

in_checker('abc', 'tttrrrabcwww');  # O(n)
in_checker('abc', 'tttrrrabcwww');  # O(1)
Ответ написан
xSkyFoXx
@xSkyFoXx
Ещё можно попробовать:

[lambda x: x is word for x in s]

Но не уверен, что это будет быстрее, чем то, что предложил Pavel Denisov
Ответ написан
Комментировать
Guest007
@Guest007
Django, Python, Linux и всё такое...
(True if word in s else False)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы