为什么嵌套 for 循环比单个 for 循环更快?
start = time()
k = 0
m = 0
for i in range(1000):
for j in range(1000):
for l in range(100):
m+=1
#for i in range(100000000):
# k +=1
print int(time() - start)
对于单个 for 循环,我得到 14 秒的时间,对于 10 秒的嵌套 for 循环
最佳答案
相关上下文在this中解释。主题。
简而言之,range(100000000)
在 Python 2 中构建了一个巨大列表,而使用嵌套循环,您只能构建总计 1000 + 1000 + 100 的列表= 2100 个元素。在 Python 3 中,range
像 Python 2 中的 xrange
一样更智能和惰性。
下面是以下代码的一些时序。绝对运行时间取决于系统,但相互比较这些值很有值(value)。
import timeit
runs = 100
code = '''k = 0
for i in range(1000):
for j in range(1000):
for l in range(100):
k += 1'''
print(timeit.timeit(stmt=code, number=runs))
code = '''k = 0
for i in range(100000000):
k += 1'''
print(timeit.timeit(stmt=code, number=runs))
输出:
CPython 2.7 - 范围
264.650791883
372.886064053
解释:构建庞大的列表需要时间。
CPython 2.7 - range
与 xrange
交换
231.975350142
221.832423925
解释:几乎相等,符合预期。 (嵌套的 for
循环应该稍微
比单个 for
循环更大的开销。)
CPython 3.6 - 范围
365.20924194483086
437.26447860104963
解读:有趣!我没想到这一点。有人吗?
关于Python 嵌套 for 循环比单个 for 循环更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53265422/