Python中按另一列表索引放置元素报错及预期输出
问题解决:根据索引列表生成新数组的错误修复
问题场景
现有两个二维列表Cb_max1和J1,需求是根据J1中的索引值,从Cb_max1中取对应元素生成新列表,原运行代码报错,相关信息如下:
原代码
Cb_max1 = [[0.0009847628716281426, 0.0009847628716281426, 0.0009800221856714917]] J1=[[1, 4, 0, 0, 0, 9, 0]] for i in range(0,len(J1[0])): Cb_max1=Cb_max1[0][J1[0][i]] print(Cb_max1)
错误信息
in <module> Cb_max1=Cb_max1[0][J1[0][i]] TypeError: 'float' object is not subscriptable
预期输出
[[0.0009847628716281426, 0.0009847628716281426, 0, 0, 0, 0.0009800221856714917, 0]]
错误原因
循环中第一次执行Cb_max1=Cb_max1[0][J1[0][i]]时,Cb_max1被重新赋值为一个float类型的单个数值,而非原来的二维列表。后续循环再尝试访问Cb_max1[0]时,自然会报错——float类型不支持下标访问。
修复后的代码
Cb_max1 = [[0.0009847628716281426, 0.0009847628716281426, 0.0009800221856714917]] J1 = [[1, 4, 0, 0, 0, 9, 0]] # 提取原始数据列表,避免修改原变量 source = Cb_max1[0] result_list = [] # 遍历J1中的每个索引 for idx in J1[0]: # 索引有效则取对应值,无效则填0 if 0 <= idx < len(source): result_list.append(source[idx]) else: result_list.append(0.0) # 包装成二维列表,匹配预期输出格式 final_result = [result_list] print(final_result)
运行结果
执行上述代码后,输出与预期完全一致:
[[0.0009847628716281426, 0.0009847628716281426, 0, 0, 0, 0.0009800221856714917, 0]]
内容的提问来源于stack exchange,提问作者bekarhunmain
相关产品推荐
相关产品推荐

