Python for循环体内修改索引跳2位不生效,对比C++该如何实现?
核心原因
Python 的 for i in range(len(c)) 语法和 C++ 的三段式 for 循环底层逻辑完全不同:
- C++ 的 for 循环每次迭代都会主动执行末尾的自增逻辑,循环体内修改的索引值会直接参与后续的边界判断和自增计算
- Python 的 for 循环本质是遍历
range()生成的固定整数序列,每次循环的i是直接从序列中取出的下一个值,你在循环体内对i的赋值仅在当前轮次生效,下一轮迭代会被序列的下一个值直接覆盖,所以你写的i = i+2才会被忽略。
实现方案
你不需要强制使用for循环,while循环是当前场景下可读性、维护性最优的写法。如果一定要用for循环实现也可以,通过额外引入跳过标记变量来实现:
def jumpingOnClouds(c): count_jumps = 0 skip_step = 0 for i in range(len(c)): # 跳过指定步数的索引 if skip_step > 0: skip_step -= 1 continue # 优先跳2步 if i+2 < len(c) and c[i] == 0 and c[i+2] == 0: # 跳2步需要跳过下1个遍历到的i skip_step = 1 count_jumps += 1 # 次选跳1步 elif i+1 < len(c) and c[i] == 0 and c[i+1] == 0: count_jumps += 1 return count_jumps c = [0, 0, 0, 1, 0, 0] jumpingOnClouds(c)
注意:上述for循环实现方式属于写法上的适配,实际运行效率和可读性都不如你提供的while循环版本,日常开发优先推荐使用while循环实现该需求。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

