如何优化代码提取X2/Y2值并修正结果不符合预期的问题?
问题分析与修复
你的代码核心问题是内层循环遍历targ_1时会重复赋值,最后一次赋值会覆盖之前的结果。比如当target='0'时,先给X2/Y2赋值为write-back对应的10/215,紧接着循环到uncachable-high,又把值改成了35/215,所以最终输出的是后者。
根据你的需求:
target='0'→ 取write-back的坐标(mem_coor[0], mem_coor[1])target='1'→ 取uncachable-high的坐标(mem_coor[10], mem_coor[11])
完全不需要内层遍历targ_1,直接根据target的值直接匹配对应坐标即可,修改后的代码如下:
thread_list = ['DWr','Idle','MulWr','Lock'] # 需要的线程算法列表 Target_list = ['0','0','0','1'] # 目标编号列表 mem_coor = [10,215,35,215,60,215,85,215,210,215,235,215,260,215,285,215] # 找到的目标XY坐标,10=X,215=Y targ_1 = ['write-back','uncachable-high'] # 目标类型列表 count_dash_T_list = [0,1,2,3] # 计数列表 count_target = 0 # 目标计数器 # 遍历目标列表四次 for i in range(len(count_dash_T_list)): target = Target_list[count_target] count_target += 1 # 根据target值直接匹配对应坐标 if target == '0': # 取write-back对应的坐标 X2 = mem_coor[0] Y2 = mem_coor[1] elif target == '1': # 取uncachable-high对应的坐标 X2 = mem_coor[10] Y2 = mem_coor[11] print(X2) print(Y2)
如果想让代码更易维护,可以用字典把目标类型和坐标索引做映射,这样后续修改类型或坐标时更方便:
thread_list = ['DWr','Idle','MulWr','Lock'] Target_list = ['0','0','0','1'] mem_coor = [10,215,35,215,60,215,85,215,210,215,235,215,260,215,285,215] # 目标类型到坐标索引的映射 target_coords = { 'write-back': (0, 1), 'uncachable-high': (10, 11) } # target值到目标类型的映射 target_map = { '0': 'write-back', '1': 'uncachable-high' } for target in Target_list: # 根据target值找到对应的目标类型,再取坐标索引 x_idx, y_idx = target_coords[target_map[target]] X2 = mem_coor[x_idx] Y2 = mem_coor[y_idx] print(X2) print(Y2)
这段优化后的代码直接遍历Target_list,省去了多余的计数器,逻辑更清晰,也避免了循环覆盖的问题。
运行修改后的代码,就能得到你预期的输出:
10, 215, 10, 215, 10, 215, 235, 215
内容的提问来源于stack exchange,提问作者K-Bri-How
相关产品推荐
相关产品推荐

