in运算符和for循环有区别吗?

时间:2019-05-30 10:14:06

标签: python algorithm data-structures

我想知道“ in”运算符是否可以作为for循环使用,并且时间复杂度是否相等?

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

5 in range(10)

3 个答案:

答案 0 :(得分:0)

在这些情况下,它们的工作方式有所不同。

在循环中,for variable in iterablevariable设置为iterable的每个元素。在您的情况下,n等于0,大于1,小于2 ...大于9。

在第二种情况下,没有循环,in检查variable中是否有iterable。因此,在您的情况下,它将检查迭代器0-1-2-...-9中是否包含5。

让我们用打印件修改代码:

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。在第二种情况下,您只是检查50-9中。

答案 1 :(得分:0)

第二种方法...

5 in range(10)

...快得多。 Python的range是惰性迭代器。当您检查一个值是否在数字范围内时,可以很容易地计算出它,而不是在范围内循环。这意味着存在O(1)的时间复杂度。

然而,第一种方法最糟糕的是O(n)的时间复杂度,因为您可能必须遍历整个范围。

答案 2 :(得分:0)

~ $ 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

这很容易测试,我认为结果并不意外:)