首页 > 解决方案 > 如何在带有字符串的列表上使用for循环更改变量名

问题描述

我想遍历具有变量名称的列表,以便将这些变量用作函数的输入。我认为,当我提供代码时,它会更清楚。

data_low_wind= data.loc[data['Windspeed']<=10]
...#(high_wind and W,S,E have similar characteristic and not important for the problem)
data_N = data.loc[(data['WindDirection'] > 315) & (data['WindDirection'] <= 45)]
...
weather_condition = ['low_wind','high_wind','N','W','S','E']


 for i in weather_condition:
     if len(data_i) != 0:
        Errormeasure_i=table_Errormeasure(data_i,park_size)

此代码还不能工作,因为 的值weather_condition被读取为字符串,因此不会被识别为data_命令的附加内容。我的目标是 for 循环产生以下结果:

if len(data_low_wind)!=0:
   Errormeasure_low_wind=table_Errormeasure(data_low_wind,park_size)
#(and for the other elements of the list accordingly)

这通常是一个好的(可接受的)方法吗?我读到,通常不希望通过 for 循环更改变量名。我做的另一种方法是使用map(lambda...),但这也没有产生预期的结果。

weather_condition = ['low_wind','high_wind','N','W','S','E']
data= map(lambda x: 'data_'+x,weather_condition)
print(data)
[output] <map object at 0x00000180929D2860>

我感谢任何帮助和澄清我的问题。(我希望,这个问题不是太多重复。其他问题没有解决我的问题)

标签: pythonfor-loopvariables

解决方案


你应该使用字典。

wind_data = {
    'low_wind': data.loc[data['Windspeed']<=10],
    'N': data.loc[(data['WindDirection'] > 315) & (data['WindDirection'] <= 45)],
    ...
}
error_measures = {}

for key, value in wind_data.items():
     if len(value) != 0:
         error_measures[key] = table_Errormeasure(value, park_size)

推荐阅读