我有一个很长的循环,我想检查每N次迭代的状态,在我的具体情况下,我有一个1000万个元素的循环,我想每百万次迭代打印一个简短的报告.
所以,目前我正在做(n是迭代计数器):
if (n % 1000000==0):
print('Progress report...')
Run Code Online (Sandbox Code Playgroud)
但我担心我通过计算每次迭代的模数来减慢过程,因为一次迭代只持续几毫秒.
有一个更好的方法吗?或者我不应该担心模数运算?
And*_*wKS 25
当你达到想要的号码时,如何保持计数器并将其重置为零?添加和检查相等性比模数更快.
printcounter = 0
# Whatever a while loop is in Python
while (...):
...
if (printcounter == 1000000):
print('Progress report...')
printcounter = 0
...
printcounter += 1
Run Code Online (Sandbox Code Playgroud)
虽然很可能编译器已经为你做了一些这样的优化......但是这可能让你安心.
paj*_*ton 11
真的放慢了吗?你必须亲自尝试看看.它不会有太大的减速,但如果我们谈论纳秒,它可能是相当大的.或者,您可以将一个1000万个循环转换为两个较小的循环:
m = 1000000
for i in range(10):
for i in range(m):
// do sth
print("Progress report")
Run Code Online (Sandbox Code Playgroud)
Wol*_*'08 11
Sup,dawg?如果您需要其他评论/解释,请与我联系:
x是已经过的迭代次数.n是迭代次数(您可以使用整数代替5,块1;或者,您可以使用n代替5替换第n个第二次迭代操作,第2块)我们的目标是每隔xth迭代执行一次第5次/第n次迭代.我们正在进行100次迭代.
第1块,最小变量:
for x in 100:
#what to do every time.
if x % 5 == 0:
#what to do every 5th time.
Run Code Online (Sandbox Code Playgroud)
b,概括.
n = 5
for x in 100:
#what to do every time.
if x % n == 0:
#what to do every 5th time.
Run Code Online (Sandbox Code Playgroud)
如果您有任何问题,请告诉我,因为我在此处写完之后没有时间对其进行测试.
关于modulo和其他基本运算符:https : //docs.python.org/2/library/stdtypes.html http://www.tutorialspoint.com/python/python_basic_operators.htm
关于乌龟:https : //docs.python.org/2/library/turtle.html https://michael0x2a.com/blog/turtle-examples
很难知道您的系统如何在不进行测试的情况下优化代码.
您可以通过实现将零评估为false来简化关系部分.
if(not N % 10000000)
do stuff
Run Code Online (Sandbox Code Playgroud)