Почему "for ... in ..." МЕДЛЕННО медленнее, чем "list.index ()"? - PullRequest
0 голосов
/ 13 сентября 2018

Сравнивая время выполнения алгоритмов поиска в списке, я пришел к результату, что list.index() ОЧЕНЬ намного быстрее, чем простой for in.Согласно это они оба должны быть O (n).Вот мои результаты в моих тестах:

Простое решение проходит около 350 тестов в течение 3 секунд:

def linear_simple(arr):
    for i in range(len(arr)):
        if arr[i] == #my searched value#:
            return i

Индексное решение проходит все 2000 тестов в течение 3 секунд (на самом деле это делается дажев течение 2 секунд):

def linear_index(arr):
    return arr.index( #my searched value# )

Все тестовые массивы генерируются случайным образом.Испытания проводились несколько раз с похожими результатами.

Это означает, что index() примерно в 9 раз быстрее.Зачем?Разве index() не просто повторяет один и тот же путь по списку, как for in?

1 Ответ

0 голосов
/ 13 сентября 2018

Как сказал Chris_Rands, list.index реализован на C. Поскольку он компилируется и не интерпретируется, код выполняется намного быстрее.

В любом случае, вы можете немного оптимизировать свой код:

def linear_simple(arr, value):
    for i, e in enumerate(arr):
        if e == value:
            return i

Этот код работает на моем компьютере быстрее (но не так быстро, как list.index)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...