Python嵌套for循环迭代异常 坐标范围匹配结果重复问题求助
飓风轨迹点位匹配循环逻辑异常排查
问题1:测试样本存在语法错误
你提供的sample列表末尾两个测试点之间缺失逗号,属于语法错误:
# 错误写法,两个子列表之间无逗号 [99999, 18.6, -80.5][99998,18.6,-80.5]
该写法会触发Python隐式索引逻辑,不会生成你预期的[99998,18.6,-80.5]元素,这是结果中缺失99998号测试点的核心原因之一。正确写法需要在两个子列表间补逗号:
[99999, 18.6, -80.5], [99998,18.6,-80.5]
问题2:双层循环无终止逻辑,导致重复追加元素
你当前的双层循环逻辑中,对每一个待校验点位loc,会遍历完ida内全部10个轨迹点,只要点位落在某条轨迹的缓冲范围内就会追加一次结果,没有匹配成功后跳出内层循环的逻辑。
你的测试点[99999, 18.6, -80.5]刚好落在所有10个轨迹点的经纬度缓冲范围内(设置的纬度缓冲±0.6、经度缓冲±0.7,所有轨迹点与该测试点的纬度差不足0.2、经度差不足0.7,全部满足判断条件),因此会被重复追加10次,和你看到的输出完全吻合。
修正后代码
调整逻辑:补全样本缺失的逗号,点位匹配到任意一条飓风轨迹后立刻终止内层遍历,避免重复追加。
ida = [['IDA', 18.6, -80.5], ['IDA', 18.619048, -80.571429], ['IDA', 18.638095, -80.642857], ['IDA', 18.657143, -80.714286], ['IDA', 18.67619, -80.785714], ['IDA', 18.695238, -80.857143], ['IDA', 18.714286, -80.928571], ['IDA', 18.733333, -81.0], ['IDA', 18.752381, -81.071429], ['IDA', 18.771429, -81.142857]] sample = [[25820, 25.891041, -80.383553], [25821, 34.016776, -117.837528], [25822, 33.812013, -117.886268], [25823, 47.980291, -122.207616], [25824, 32.553882, -116.978896], [25825, 34.102001, -118.324049], [25826, 33.410692, -112.418414], [25827, 51.503139, 5.477582], [25828, 52.248382, -0.810513], [99999, 18.6, -80.5], [99998,18.6,-80.5]] ID_exposed = [] for loc in sample: is_exposed = False for track_point in ida: lat_match = (track_point[1] - 0.6) < loc[1] < (track_point[1] + 0.6) lon_match = (track_point[2] - 0.7) < loc[2] < (track_point[2] + 0.7) if lat_match and lon_match: is_exposed = True # 匹配成功即终止剩余轨迹点遍历,避免重复 break if is_exposed: ID_exposed.append(loc) print(ID_exposed)
运行输出为:
[[99999, 18.6, -80.5], [99998, 18.6, -80.5]]
和预期结果完全一致。
备注:你描述中提到的
cargo[0][1]代表点位ID和当前代码变量逻辑不符,当前sample内点位ID存储在每个子列表的0号索引位,即loc[0]。
内容的提问来源于stack exchange,提问作者LieutenantCapricorn
相关产品推荐
相关产品推荐

