You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中遍历多列表匹配车站信息并构建图实现A*最短路径搜索

解决车站ID与名称/线路匹配问题

核心思路

别用嵌套循环遍历两个车站列表做匹配,这逻辑完全错了——你要处理的是每一组对应的station1[x]、station2[x]、line[x]、time[x],应该先把ID和名称的映射做成字典,这样能O(1)时间查找,效率高还不容易出错。

步骤1:构建ID-名称映射字典

把stationId和stationName、lineName转换成字典,快速通过ID查名称:

# 车站ID转名称字典
station_id_to_name = dict(zip(stationId, stationName))
# 线路ID转名称字典(假设line列表里的ID从1开始对应lineName的顺序)
line_id_to_name = dict(zip([str(i+1) for i in range(len(lineName))], lineName))
# 若线路ID规则不同,可根据CSV实际对应关系调整生成方式

步骤2:生成带名称的连接关系(同时构建A*用的邻接表)

遍历四组列表的对应元素,用字典匹配出名称,直接构建适合A*搜索的图结构:

# 初始化邻接表:key为车站名称,value为[(相邻车站, 线路名称, 耗时), ...]
graph = {}

for s1_id, s2_id, line_id, t in zip(station1, station2, line, time):
    # 匹配车站名称
    s1_name = station_id_to_name[s1_id]
    s2_name = station_id_to_name[s2_id]
    # 匹配线路名称
    line_name = line_id_to_name[line_id]
    # 转换耗时为数值类型(A*计算需要)
    time_cost = int(t)
    
    # 双向添加邻接关系(地铁线路是双向通行)
    if s1_name not in graph:
        graph[s1_name] = []
    graph[s1_name].append( (s2_name, line_name, time_cost) )
    
    if s2_name not in graph:
        graph[s2_name] = []
    graph[s2_name].append( (s1_name, line_name, time_cost) )

之前嵌套循环失败的原因

你之前的代码逻辑是拿station1的每个元素和station2的所有元素做相等判断,这完全偏离需求——你要处理的是同一索引下的station1和station2是一组连接关系,不是找两个列表里重复的ID。


内容的提问来源于stack exchange,提问作者Nedyalko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:15:44