【问题标题】:Is there a function in Python for counting the number of outputs created from a 'for' loop with a break?Python中是否有一个函数用于计算从带有中断的“for”循环创建的输出数量?
【发布时间】:2023-10-29 23:32:01
【问题描述】:

我在python中写了一个“for”“in”“range”循环,并放置了一个“break”函数让循环在特定条件下结束。我需要计算循环在断点处停止之前进行了多少次迭代,但我找不到正确的函数。有任何想法吗?

我试图创建 range() 值的列表,然后使用 len() 函数来获取计数,但是 range() 列表无法识别 break 函数,它只是给了我每次迭代的列表,直到范围结束。


    for val in range(Nmax):    
        x_n1 = x_n - f(x_n)/fprime(x_n)

        print(x_n1)

        if( abs((x_n1 - x_n) / (0.5 * (x_n1 +x_n))) < delta ):
            break
        x_n = x_n1

输出是每次成功迭代的数字列表。我需要生成一个额外的输出,在中断之前提供所有输出的计数。

【问题讨论】:

  • 你好@abfeldy!如果任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

标签: python-3.x loops output spyder


【解决方案1】:

只需使用 enumerate 来获得循环的索引:

for i, val in enumerate(range(Nmax)):    
    x_n1 = x_n - f(x_n)/fprime(x_n)

    print(x_n1)

    if( abs((x_n1 - x_n) / (0.5 * (x_n1 +x_n))) < delta ):
        break
    x_n = x_n1

print(i)

【讨论】:

  • 一般来说,enumerate 是获取循环计数器的最佳方式,但是当使用 range 时,ival 将始终是相同的数字,因此您可以简单地使用 @ 987654326@.
【解决方案2】:

由于您使用的是rangeval 将计算循环迭代次数。

for val in range(Nmax):    
    x_n1 = x_n - f(x_n)/fprime(x_n)

    print(x_n1)

    if( abs((x_n1 - x_n) / (0.5 * (x_n1 +x_n))) < delta ):
        break
    x_n = x_n1

print(val)

【讨论】:

    【解决方案3】:

    您可以在代码中添加计数器。

    counter = 0
    for val in range(Nmax):
        x_n1 = x_n - f(x_n)/fprime(x_n)
        if( abs((x_n1 - x_n) / (0.5 * (x_n1 +x_n))) < delta ):
            counter += 1
            break
        x_n = x_n1
    
    print(counter)
    

    之后您可以调用打印函数。只需确保不要在 for 循环中定义计数器,否则每次迭代都会重置。

    【讨论】:

      最近更新 更多