【问题标题】:How to make index in "for" loop jump forward by N如何使“for”循环中的索引向前跳N
【发布时间】:2020-05-13 14:43:06
【问题描述】:

我希望 for 循环改变它的传递行为

例如,让它每 3 个索引跳到另外 2 个位置?

for i in range(n):
   if i % 3 == 0:
     print('found i div by 3, jump 2 positions forward')
     i = i + 2

这不起作用。

它遍历从 0 到 n 范围内的每个 i。

【问题讨论】:

  • 这不起作用是什么意思?您是否收到任何错误或错误输出?
  • @AkshayNevrekar 它不能向前跳跃,它会通过每个 i - 0 到 n
  • 它似乎工作正常,打印 4 次 found i div by 3, jump 2 positions forward 范围为 10
  • 这能回答你的问题吗? Skip multiple iterations in loop
  • @Georgy 不,谢谢兄弟!我接受了答案。它有效

标签: python for-loop indexing


【解决方案1】:

你可以使用while循环,

i = 0
while i < n:
   if i % 3 == 0:
     print('found i div by 3, jump 2 positions forward')
     i = i + 2
     continue
   i = i + 1

【讨论】:

    【解决方案2】:

    如果您希望值可被 3 整除,您可以在 for 循环中指定步长

    for i in range(0, n, 3):
        print(i)
    

    输出:

    0
    3
    6
    

    【讨论】:

      【解决方案3】:
        1234563而不是 1
      1. 如果你想做其他事情并且跳过条件是动态的,不要使用迭代器,手动管理你的循环(使用while 和显式计数器),这就是我在这里推荐的

      2. 作为 (2) 的替代方案,您可以将迭代器本身弄乱,for 循环脱糖:

        it = iter(range(n))
        while True:
            try:
                i = next(it)
            except StopIteration:
                break
            ...
        

        因此,如果您手动获取 it 并保留对它的引用,则可以显式调用 next 以跳过:

        it = iter(range(n))
        for i in it:
            if i % 3 == 0:
                print('found i div by 3, jump 2 positions forward')
                next(it, None); next(it, None)
        

        我不推荐第二种风格,第一种已经预先告诉读者你在做一些奇怪的事情,而且它以一种直接的方式做到了。

      【讨论】:

        【解决方案4】:

        我们也可以使用切片运算符[::]根据条件改变原来的范围

        l= range(n)
        
        for i in l:
            if i%3 == 0:
                print('found i div by 3, jump 2 positions forward')
                l = l[::2]
        

        【讨论】:

          猜你喜欢
          • 2010-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-08
          • 1970-01-01
          • 2022-01-03
          相关资源
          最近更新 更多