Python 嵌套 for 循环比单个 for 循环更快

标签 python for-loop runtime nested-loops

为什么嵌套 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 - rangexrange 交换

231.975350142
221.832423925

解释:几乎相等,符合预期。 (嵌套的 for 循环应该稍微 比单个 for 循环更大的开销。)

CPython 3.6 - 范围

365.20924194483086
437.26447860104963

解读:有趣!我没想到这一点。有人吗?

关于Python 嵌套 for 循环比单个 for 循环更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53265422/

相关文章:

asp.net - 用数字填充asp.net下拉列表

Android,Logcat 给出关于 SearchView 类的错误

delphi - 在 Delphi XE2 上使用运行时包进行构建

java - 在 Uno 中获取 for 循环以反转顺序

arrays - 将数组从某个位置复制到c中的另一个数组

python - Pandas 将混合 float/int 类型列的 int 元素读取为 nan

python - 如何创建多个一维轴,用彩色线条显示间隔?

java - 我想在其中备份数据库的桌面应用程序系统

python - 在 Python 中读取二进制数据 (ieee-le)

python - 展平任意深度的字典