【问题标题】:Changing the iterator of the for loop inside the code block更改代码块内 for 循环的迭代器
【发布时间】:2022-01-14 16:14:39
【问题描述】:

假设我有一个类似的代码块,

for i in range(15):
    print(i)
    i+=5

我希望每次迭代的 i 值应该是 i = 0,5,10, ....

即使我在 for 循环的代码块中更改迭代器,该值也不会影响循环。

谁能解释里面发生的功能?

【问题讨论】:

  • 为什么会这样?范围对象不知道变量已更改,它无法返回依赖于它的下一个值。
  • 在每次迭代开始时,for 语句会为 i 分配一个新值。您可以在循环中使用 i 进行猴子操作,但它总是会从迭代器中重置为下一个值。
  • 获得您想要的结果:for i in range(0, 15, 5): print(i)
  • 我认为 OP 想要前 15 个 5 的倍数,而不是 5 的倍数小于 15。

标签: python for-loop iterator


【解决方案1】:

for 循环就像一个赋值语句。 i 会在每次迭代的顶部获得一个新值,无论您可能对循环体中的 i 做什么。

for 循环相当于

r = iter(range(15))
while True:
    try:
        i = next(r)
    except StopIteration:
        break
    print(i)
    i += 5

i 上加 5 没有任何持久效果,因为i = next(r) 总是会在下一个执行。

【讨论】:

    【解决方案2】:

    正如其他人所说,range 发出数字,您的分配无关紧要。

    要获得所需的结果,请使用类似

    for i in range(0, 15, 5):
        print(i)
    
    

    【讨论】:

      【解决方案3】:

      在这里,每次运行新循环时,您都将 i 定义为从 014 的数字。我认为你想要的是这样的:

      i = 0
      for _ in range(/*how many times you want i to print out*/):
          print(i)
          i += 5
      

      【讨论】:

      • 这将超过 15。
      • 知道。那是故意的,因为他想要它十五次
      • 不清楚他想要什么,或者他在想什么逻辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 2012-08-07
      • 2017-08-23
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多