我想知道“ in”运算符是否可以作为for循环使用,并且时间复杂度是否相等?
for n in range(10):
if n == 5:
return True
return False
5 in range(10)
答案 0 :(得分:0)
在这些情况下,它们的工作方式有所不同。
在循环中,for variable in iterable
将variable
设置为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。在第二种情况下,您只是检查5
在0-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
这很容易测试,我认为结果并不意外:)