如何将get_plan列表转为多段Depot起止的route_list(通用方法)
问题描述
现有如下get_plan列表:
get_plan = [ ('Depot', 'Addr_3'), ('Addr_3', 'Addr_4'), ('Addr_4', 'Depot'), ('Depot', 'Addr_1'), ('Addr_1', 'Addr_2'), ('Addr_2', 'Depot'), ('Depot', 'Addr_5'), ('Addr_5', 'Addr_6'), ('Addr_6', 'Depot') ]
需要将其转换为route_list格式,每个子列表对应一条以Depot结尾、新路线以Depot起始的完整路径:
route_list = [ [('Depot', 'Addr_3'), ('Addr_3', 'Addr_4'), ('Addr_4', 'Depot')], [('Depot', 'Addr_1'), ('Addr_1', 'Addr_2'), ('Addr_2', 'Depot')], [('Depot', 'Addr_5'), ('Addr_5', 'Addr_6'), ('Addr_6', 'Depot')] ]
通用实现方法
可以用Python编写如下通用逻辑,核心是按Depot结尾的节点拆分路线:
def split_routes(get_plan): route_list = [] current_route = [] for segment in get_plan: current_route.append(segment) # 当当前路段的终点是Depot时,完成一条路线 if segment[1] == 'Depot': route_list.append(current_route.copy()) current_route = [] # 处理可能存在的未完成路线(若原列表最后未以Depot结尾) if current_route: route_list.append(current_route) return route_list # 测试示例 get_plan = [ ('Depot', 'Addr_3'), ('Addr_3', 'Addr_4'), ('Addr_4', 'Depot'), ('Depot', 'Addr_1'), ('Addr_1', 'Addr_2'), ('Addr_2', 'Depot'), ('Depot', 'Addr_5'), ('Addr_5', 'Addr_6'), ('Addr_6', 'Depot') ] route_list = split_routes(get_plan) print(route_list)
逻辑说明
- 初始化结果列表
route_list和当前路线缓存current_route - 遍历原列表的每一段路径:
- 将当前路段加入缓存
- 检查该路段的终点是否为
Depot,若是则将缓存的路线加入结果,并重置缓存
- 最后处理可能存在的未完成路线,避免原列表末尾无
Depot导致数据丢失
内容的提问来源于stack exchange,提问作者iviuffek
相关产品推荐
相关产品推荐

