【问题标题】:How to affect outer loop variable from inner loop in Python?如何从 Python 中的内循环影响外循环变量?
【发布时间】:2016-12-14 15:33:19
【问题描述】:

这是在 Java 中:

for(int i=0; i<10; i++){
    while(i%3!=0)
        i++;
    System.out.print(i + " ");
}

这将输出:

0 3 6 9

我正在尝试在 Python 3 中实现类似的代码块。我做不到。

在外循环中,我不能使用范围,因为它会导致我在某个地方读到的整个列表的迭代。所以,我在下面尝试,但它会危险地失败,无限运行。

i=1
while i<=10:
    while i%3 is not 0:
        i+=1
    print('run')

我可以通过删除内部while 并将代码更改为i+=3 来实现目标。但是我正在尝试制作的程序有重要的条件,所以它必须在那里。 必须有两个循环,并且基于内循环条件匹配,我正在递增迭代变量,所以当我中断并处理一些程序输出时,父循环应该从我在内循环中中断的地方开始迭代。 以上只是我想分享的一个例子。我需要有关如何复制 Python 中的 Java 代码中描述的更改的建议。

更新:这是我正在尝试的程序:https://softwareengineering.stackexchange.com/questions/327908/finding-total-number-of-subarrays-from-given-array-of-numbers-with-equal-max-and

【问题讨论】:

  • 好吧,一旦 i 达到 3,你就不会增加 i,所以它当然会无限运行。
  • 你的外部 for 循环永远不会增加 i。因此,如果 i 从 0 开始,由于缺少增量,它将永远保持为 0。此外,如果您想在一行中打印出 [0, 10] 中的每三个数字,为​​什么不这样做:for i in range(0, 11, 3): print(i, end=' ')

标签: java python for-loop conditional-statements


【解决方案1】:

好的。对党的另一个建议。可能对您的实际任务有所帮助:

g = iter(range(10))
for i in g:
    while i%3 is not 0:
        i = next(g)
    print(i)

主要区别在于,当内部循环超出为迭代器定义的范围(即外部循环)时,这将引发 StopIteration 异常。可能是想要的,也可能不是。

【讨论】:

  • 有趣。向我介绍 iter 函数。
【解决方案2】:
i = 0
while i < 10:
    while i % 3 is not 0:
        i += 1
    print(str(i) + " ")
    i += 1

【讨论】:

  • @xploreraj 那么我给出的最佳答案就是你想要的。
  • 这似乎与 java 版本完全匹配,不是吗?
  • @Aguy 是的。在 Python 中,你基本上没有比这更接近的了。
  • 当我错过外部增量时,不知道心在哪里,没有@Dallan 指出的那样,它会永远卡住。可能是深夜挂了!
【解决方案3】:

另一种选择是只使用列表推导:

print(' '.join([i for i in range(10) if i % 3 == 0])

【讨论】:

  • 只是在内部循环之外递增。外循环永远运行,因为一旦内循环完成,i 的值就不会改变。但是,如果您想要的输出是您给出的 0 3 6 9 示例,请使用@Dallan 的答案。
【解决方案4】:

您的示例中不需要两个循环。

while i<=10:
  if i%3 == 0:
    print(i+ " ")
  i++

你的代码可以无限运行,因为你永远不会在 i 等于 3 时增加它

【讨论】:

    【解决方案5】:

    根据我对 OP 问题的评论:

    for i in range(0, 11, 3): print(i, end=' ')

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      相关资源
      最近更新 更多