Python for循环内修改迭代变量i为何未按预期实现跳转?
问题根因
- Python的
for循环配合range()使用时,迭代器会在循环初始化阶段就生成固定的数值序列,后续循环过程中无论你怎么修改迭代变量i,或者修改生成range用的参数c,都不会改变已经生成的迭代序列,下一轮循环还是会按初始序列的顺序取i值。 - 你修改
c = high的逻辑写在了for循环结束之后,循环执行过程中完全不会触发这个赋值,自然不会生效。
修复方案
改用可自主控制迭代变量的while循环实现需求,修改后代码如下:
def max_min(self, data, high, low): list1 = [] list2 = [] x = False i = 0 data_len = len(data) while i < data_len: print(f"i = {i}") if i == low and not x: if high > low: list1.append(data[i]) list2 = data[low + 1:high] x = True # 触发跳转标记 print(f"list2 = {list2}") # 直接把迭代变量设为high,下一轮循环就从high开始执行 i = high else: list2 = data[low + 1:] print(f"list2 = {list2}") else: list1.append(data[i]) print(f"list1 = {list1}") i += 1 return list1, list2
按你给出的high=6、low=3的测试场景运行上述代码,输出的i序列会完全符合你的预期。
内容的提问来源于stack exchange,提问作者user14661106
相关产品推荐
相关产品推荐

