【问题标题】:Modify range() during for loop [duplicate]在 for 循环期间修改 range() [重复]
【发布时间】:2021-03-16 17:52:23
【问题描述】:

我可以在 for 循环期间修改 range() 吗?

for i in range(10):
    if something:
        pass
        # change range
    print(i)

一个例子: 让方法somethingi == 5,body 将范围缩小一。

Expected output:
0
1
2
3
4
5
5
6
7
8
9

我有一个更复杂的range(),比如range(0, len(data), 1024)

感谢您的帮助!

【问题讨论】:

  • 如果你想控制你的循环,最好使用while而不是for
  • 这能回答你的问题吗? Changing the number of iterations in a for loop
  • 我也建议你在这种情况下使用while
  • 你为什么要这样做?你到底想完成什么?

标签: python


【解决方案1】:

您不能在迭代过程中修改for 循环中使用的生成器。相反,您可以使用while 循环重构您的代码。例如,如果您的范围是range(start, stop, step)(使用类似于Python documentation 中使用的符号),您可以编写如下循环:

i = start
while i < stop:
    # do stuff
    i += step

这允许您在while 循环中随意修改i

【讨论】:

    【解决方案2】:

    尝试以下方法:

    i = 0
    
    while i <= 5:
        print(i)
        i = i + 1
    i = i - 1
    while i <= 10:
        print(i)
        i = i + 1
    

    正如其他人所说,在这种情况下最好使用while 循环并在每次执行循环时手动增加您的值,而不是使用for 循环。

    【讨论】:

      【解决方案3】:

      您可以在 for 循环中使用 break 关键字对其进行修改。

      start_val  = 0
      stop_val = 10
      for i in range(start_val ,stop_val):
          if i==5:
              start_val = 5
              print(i)
              for i in range(start_val ,stop_val):
                  print(i)
              break
          print(i)
      

      这给出了预期的输出:

      0
      1
      2
      3
      4
      5
      5
      6
      7
      8
      9
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-04
        • 2019-04-19
        • 1970-01-01
        • 2016-04-25
        • 1970-01-01
        • 2020-05-22
        相关资源
        最近更新 更多