python – 循环次数与效率有关(解释与编译语言?)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 循环次数与效率有关(解释与编译语言?),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1992字,纯文字阅读大概需要3分钟。
内容图文
![python – 循环次数与效率有关(解释与编译语言?)](/upload/InfoBanner/zyjiaocheng/795/a4684c9db73944fd9fbe3859a908d97f.jpg)
假设您必须使用2个甚至3个循环执行计算.直观地说,使用单个循环执行此操作可能更有效.我尝试了一个简单的Python示例:
import itertools
import timeit
def case1(n):
c = 0
for i in range(n):
c += 1
return c
def case2(n):
c = 0
for i in range(n):
for j in range(n):
for k in range(n):
c += 1
return c
print(case1(1000))
print(case2(10))
if __name__ == '__main__':
import timeit
print(timeit.timeit("case1(1000)", setup="from __main__ import case1", number=10000))
print(timeit.timeit("case2(10)", setup="from __main__ import case2", number=10000))
这段代码运行:
$python3 code.py
1000
1000
0.8281264099932741
1.04944919400441
因此,有效的1循环似乎更有效.然而,我的问题有一个稍微不同的情况,因为我需要使用数组中的值(在下面的例子中,我使用函数范围进行简化).也就是说,如果我将所有内容都折叠到一个循环中,我将不得不从另一个数组的值创建一个扩展数组,该数组的大小介于2到10个元素之间.
import itertools
import timeit
def case1(n):
b = [i * j * k for i, j, k in itertools.product(range(n), repeat=3)]
c = 0
for i in range(len(b)):
c += b[i]
return c
def case2(n):
c = 0
for i in range(n):
for j in range(n):
for k in range(n):
c += i*j*k
return c
print(case1(10))
print(case2(10))
if __name__ == '__main__':
import timeit
print(timeit.timeit("case1(10)", setup="from __main__ import case1", number=10000))
print(timeit.timeit("case2(10)", setup="from __main__ import case2", number=10000))
在我的计算机中,此代码运行于:
$python3 code.py
91125
91125
2.435348572995281
1.6435037050105166
因此,似乎3个嵌套循环更有效,因为我花了一些时间在case1中创建数组b.所以我不确定我是否以最有效的方式创建了这个数组,但是把它放在一边,是否真的能够将崩溃的循环还给一个?我在这里使用Python,但是像C这样的编译语言呢?在这种情况下编译器是否做了一些优化单循环的事情?或者另一方面,当您有多个嵌套循环时,编译器是否会进行一些优化?
解决方法:
这就是为什么单循环函数需要的时间比它应该的长
b = [i * j * k for i, j, k in itertools.product(range(n), repeat=3)]
只需将整个功能更改为
def case1(n, b):
c = 0
for i in range(len(b)):
c += b[i]
return c
使timeit返回:
case1 : 0.965343249744
case2 : 2.28501694207
内容总结
以上是互联网集市为您收集整理的python – 循环次数与效率有关(解释与编译语言?)全部内容,希望文章能够帮你解决python – 循环次数与效率有关(解释与编译语言?)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。