Python新手求助:如何将列表值与字符串列表绑定为计算变量
问题
我是Python新手,遇到了一些问题。我有一个包含不同条目的Excel表格,目标是读取每个条目并自动将其分配给对应的名称。目前这是简化版表格,后续可能添加更多值,因此不想逐个处理每个值。
截至目前我已完成以下代码:
import pandas as pd import numpy as np df = pd.read_excel('koef.xlsx') data_array = np.array(df) XCoeff = [] YCoeff = [] NCoeff = [] VarName = [] for i in range(len(data_array)): XCoeff.append(data_array[i][1]) XCoeff.pop(0) for i in range(len(data_array)): YCoeff.append(data_array[i][2]) YCoeff.pop(0) for i in range(len(data_array)): NCoeff.append(data_array[i][3]) NCoeff.pop(0) for i in range(len(data_array)): VarName.append(data_array[i][0]) VarName.pop(0) s1 = "X" s2 = "Y" s3 = "N" XName = [s1 + x for x in VarName] YName = [s2 + x for x in VarName] NName = [s3 + x for x in VarName]
最终我需要生成X、Y、N三类变量列表,例如X类的首个条目为:Xdel = 0.00,Xdel2 = 4.44,Xdel3 = -2.06等,这些变量将用于后续计算。
Excel表格内容如下:
Motion X Y N 0 zero 0.00 0 0.00 1 del 0.00 4.44 -2.06 2 del2 -2.09 -0.24 0.16 3 del3 0.00 -2.95 1.38 4 u -2.20 0 0.00 5 uu 1.50 X 0.00 6 uuu 0.00 0 0.00 7 udot -1.47 0 0.00 8 v 0.11 -24.1 -7.94 9 vv 2.74 2.23 -1.15 10 vvv 0.00 -74.7 2.79 11 vdot 0.00 -16.4 -0.47 12 r -0.07 4.24 -3.32 13 rr 0.58 0.56 -0.27 14 rrr 0.00 2.58 -1.25 15 rdot 0.00 -0.46 -0.75 16 vr 13.10 0 0.00 17 vrr 0.00 -40.3 8.08 18 vvr 0.00 -9.9 -3.37 19 udel 0.00 -4.56 2.32 20 vdel2 0.00 5.15 -1.17 21 vvdel 0.00 7.4 -3.41 22 rdel2 0.00 -0.51 -0.58 23 rrdel 0.00 -0.98 0.43
目前我已成功生成所需列表,但不知如何将列表值与对应字符串名称合并为可用变量,希望能得到帮助。
解决方案
不建议直接创建大量独立变量(比如Xdel、Xdel2),后续表格扩展时会导致代码难以维护。更推荐用字典来存储这些键值对,既方便扩展,也便于后续计算调用。
优化后的代码
import pandas as pd # 读取Excel表格 df = pd.read_excel('koef.xlsx') # 初始化三个字典,分别存储X、Y、N类的变量 x_vars = {} y_vars = {} n_vars = {} # 遍历表格每一行,生成对应键值对 for _, row in df.iterrows(): motion = row['Motion'] # 生成变量名并绑定对应值到字典 x_vars[f"X{motion}"] = row['X'] y_vars[f"Y{motion}"] = row['Y'] n_vars[f"N{motion}"] = row['N']
使用示例
如果要调用Xdel的值,直接用x_vars['Xdel'];调用Ydel2就用y_vars['Ydel2'],和独立变量的使用逻辑一致,但扩展性更强——后续表格新增行时,代码不需要任何修改就能自动生成对应的键值对。
为什么不推荐独立变量?
如果硬要创建独立变量,可以用globals()或locals()动态添加,但这种方式会让代码变得混乱,变量名容易冲突,后续排查问题和维护难度极大,完全不符合你“不想逐个处理”的需求。
内容的提问来源于stack exchange,提问作者CaptainWambo
相关产品推荐
相关产品推荐

