python - 如何在带有字符串的列表上使用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>
我感谢任何帮助和澄清我的问题。(我希望,这个问题不是太多重复。其他问题没有解决我的问题)
解决方案
你应该使用字典。
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)
推荐阅读
- python - 使用python从url中提取标题
- php - 未定义变量:laravel 上的 libros(查看:C:\Users\CDS22\Desktop\Crud\resources\views\libros\index.blade.php)
- android - 如何在片段中实现cardview?
- javascript - 查找替换用户脚本不替换主网页文本
- html - 如何强制浏览器使用 HTML 5
- sql - 单个输入参数存储过程的输入值列表
- c# - 使用 selenium 和 .NET Core 运行跨浏览器测试
- unity3d - 当相机围绕它们旋转时,Unity 会隐藏游戏对象
- asp.net - 识别单个成员以在 Json.NET 中为整个类序列化
- python - 标志为真时重置 SQL 窗口的长度?