Различаются ли оператор и цикл? - PullRequest
0 голосов
/ 30 мая 2019

Мне было интересно, работает ли оператор "in" как цикл for и эквивалентна ли сложность времени?

for n in range(10):
    if n == 5:
        return True
return False

5 in range(10)

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

2-й подход ...

5 in range(10)

... намного быстрее. range Python - это ленивый итератор. Когда вы проверяете, находится ли значение в диапазоне чисел, его можно легко вычислить, а не зацикливать диапазон. Это означает, что есть O(1) сложность времени.

Первый подход, в худшем случае, имеет O(n) временную сложность, так как вам, возможно, придется циклически проходить весь диапазон.

0 голосов
/ 30 мая 2019
~ $ python -m timeit "def func():
>   for x in range(10):
>     if x == 5:
>       return True
>     return False
> func()"
1000000 loops, best of 3: 0.352 usec per loop

~ $ python -m timeit "5 in range(10)"
1000000 loops, best of 3: 0.263 usec per loop

Это легко проверить, и я думаю, что результаты не являются большим сюрпризом:)

0 голосов
/ 30 мая 2019

В этих случаях они работают по-разному.

В цикле for variable in iterable установит variable для каждого элемента iterable.В вашем случае n будет равно 0, чем 1, чем 2 ..., чем 9.

Во втором случае, без цикла, in проверяет, является ли variable вiterable.Так что в вашем случае он будет проверять, есть ли 5 ​​в итераторе 0-1-2-...-9.

Давайте изменим ваш код с помощью отпечатков:

def a():
    for n in range(10):
        print(n)
        if n == 5:
            return True
    return False

a()
print()
print(5 in range(10))

Будет напечатано:

0
1
2
3
4
5

True

Таким образом, в первом случае вы устанавливаете n последовательно на 0-9.Во втором случае вы просто проверяете 5 в 0-9.

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