如何将range循环嵌套到另一个中?解决重复输出A值问题
修复循环嵌套问题:实现顺序输出0到A的数值
问题描述
尝试将i2的逻辑插入i1循环中,实现顺序输出0到A的数值,但当前代码仅重复输出数值A,需调整循环结构修正该问题。
预期与实际结果对比
左侧为预期结果,右侧为实际结果
原始代码
for i2 in range(record_len_id+1): #0 ~ A name = i2 print(name) for i1 in range(num_records): ##0 ~ B name1 = i1 this_record = read_data(binary_data, record_len, data_start_point + i1 * record_len) MergeFull = "" if read_int(this_record, 0) == 417: MergeFull = "======\n{}\n".format(i2) #Condition Here!!!!!! MergeFull += "Debug2: {} | ".format(read_int(this_record, 4)) output_file.write(str(MergeFull)+"\n")
问题原因
当前代码中i2的循环与i1的循环完全独立,当i1循环执行时,i2已经完成了整个range(record_len_id+1)的遍历,此时i2的固定值为record_len_id(即数值A),因此每次触发条件时都会输出A。
修复方案
根据需求场景选择以下两种方案之一:
方案1:嵌套循环(每次触发条件时遍历0到A)
将i2的循环移至i1循环内部的条件判断中,确保每次满足条件时都顺序输出0到A:
for i1 in range(num_records): ##0 ~ B name1 = i1 this_record = read_data(binary_data, record_len, data_start_point + i1 * record_len) MergeFull = "" if read_int(this_record, 0) == 417: # 触发条件时遍历i2的0到A,顺序写入内容 for i2 in range(record_len_id+1): #0 ~ A MergeFull += "======\n{}\n".format(i2) MergeFull += "Debug2: {} | ".format(read_int(this_record, 4)) output_file.write(str(MergeFull)+"\n")
方案2:索引复用(i1与i2范围一致时)
如果num_records等于record_len_id+1(即i1的遍历范围也是0到A),直接复用i1的索引值即可实现顺序输出:
for i1 in range(num_records): ##0 ~ B,此时B=A name1 = i1 this_record = read_data(binary_data, record_len, data_start_point + i1 * record_len) MergeFull = "" if read_int(this_record, 0) == 417: MergeFull = "======\n{}\n".format(i1) # 用i1代替i2,保证顺序对应 MergeFull += "Debug2: {} | ".format(read_int(this_record, 4)) output_file.write(str(MergeFull)+"\n")
修复说明
- 方案1适用于需要在每次触发条件时完整输出0到A的场景;
- 方案2适用于i1与i2的遍历范围完全匹配的场景,无需额外循环,提升效率。
内容的提问来源于stack exchange,提问作者HelloSanji
相关产品推荐
相关产品推荐


