在Python中每N次迭代执行语句

And*_*nca 16 python loops

我有一个很长的循环,我想检查每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?如果您需要其他评论/解释,请与我联系:

1.人类语言宣言

x是已经过的迭代次数.n是迭代次数(您可以使用整数代替5,块1;或者,您可以使用n代替5替换第n个第二次迭代操作,第2块)我们的目标是每隔xth迭代执行一次第5次/第n次迭代.我们正在进行100次迭代.

1.易于理解的代码

第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)

如果您有任何问题,请告诉我,因为我在此处写完之后没有时间对其进行测试.

3.练习

  1. 如果您已正确完成此操作,请查看是否可以将其与tu​​rtle.Pen()和turtle.forward()函数一起使用.
  2. 看看你是否可以将这个程序与turtle.circle()函数一起使用.
  3. 查看阅读以尝试改进您的计划.

关于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


Lt *_*Dax 8

很难知道您的系统如何在不进行测试的情况下优化代码.

您可以通过实现将零评估为false来简化关系部分.

if(not N % 10000000)
   do stuff
Run Code Online (Sandbox Code Playgroud)