You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化代码提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:18:18