Python中替换列表值的更优方式?NOAA极光数据经度转换优化
更优雅的极光预报数据经度转换实现
方法1:用数学公式简化原地修改
原代码的条件判断可以用通用数学公式替代,无需分支逻辑就能完成经度范围转换,代码更简洁且覆盖所有边界情况:
import requests r = requests.get("https://services.swpc.noaa.gov/json/ovation_aurora_latest.json") data = r.json() for coord in data['coordinates']: # 公式直接将0-360经度转为-180至180范围 coord[0] = (coord[0] + 180) % 360 - 180
这个公式能处理所有特殊值:360°转为0°、180°保持180°、190°转为-170°,完全满足需求。
方法2:列表推导式生成新列表(不修改原数据)
如果需要保留原始数据,使用列表推导式生成转换后的新列表,更符合Python的简洁风格,同时避免原地修改的副作用:
import requests r = requests.get("https://services.swpc.noaa.gov/json/ovation_aurora_latest.json") data = r.json() # 解构每个坐标元素,转换后重新组合成新列表 converted_coords = [ [(lon + 180) % 360 - 180, lat, value] for lon, lat, value in data['coordinates'] ] # 若需要替换原数据的coordinates字段 data['coordinates'] = converted_coords
方法3:numpy批量处理(适合大数据量)
如果数据集规模较大,用numpy的向量运算能力能显著提升处理效率,远快于Python原生循环:
import requests import numpy as np r = requests.get("https://services.swpc.noaa.gov/json/ovation_aurora_latest.json") data = r.json() # 将坐标列表转为numpy数组 coords_array = np.array(data['coordinates']) # 批量处理经度列(数组第一列) coords_array[:, 0] = (coords_array[:, 0] + 180) % 360 - 180 # 转回列表格式以保持原数据结构 data['coordinates'] = coords_array.tolist()
内容的提问来源于stack exchange,提问作者Stefan Gofferje
相关产品推荐
相关产品推荐

