如何排序元组列表并将含指定起点的元组置于首位?
配送最优路径查询应用的路径排序需求
问题背景
我正在开发一款配送最优路径查询应用,获取到的路径数据是元组列表:
[ ('0', '1'), ('1', '2'), ('0', '2'), ('2', '0') ]
每个元组代表一组位置,数字越小表示距离越近,同时会指定一个起点(比如示例中的2)。
已实现的排序代码
我已经完成了一个升序排序函数:
def lowToHigh(trajet): trajet_opti = trajet print(sorted(trajet_opti)) lowToHigh([ ('0', '1'), ('1', '2'), ('0', '2'), ('2', '0') ])
运行该函数后输出:
[('0', '1'), ('0', '2'), ('1', '2'), ('2', '0')]
需求说明
我需要编写一个函数,将包含指定起点的元组置于排序后的列表首位,函数框架示例如下:
def starting_tuple(): starting_number = 2 # 补充实现逻辑
期望返回结果:
[('2', '0'), ('0', '1'), ('0', '2'), ('1', '2')]
解决方案
可以先对原列表完成升序排序,再将包含指定起点的元组移至列表首位,具体实现代码如下:
def starting_tuple(trajet, starting_number): # 执行升序排序 sorted_trajet = sorted(trajet) # 查找包含起点的元组 target_tuple = None for item in sorted_trajet: if starting_number in item: target_tuple = item break # 若找到目标元组,将其移到首位 if target_tuple: sorted_trajet.remove(target_tuple) sorted_trajet.insert(0, target_tuple) return sorted_trajet # 测试示例 test_trajet = [ ('0', '1'), ('1', '2'), ('0', '2'), ('2', '0') ] print(starting_tuple(test_trajet, '2'))
运行上述代码后,输出结果为:
[('2', '0'), ('0', '1'), ('0', '2'), ('1', '2')]
实现说明
- 函数接收两个参数:路径元组列表
trajet和指定起点starting_number(注意需与元组内元素类型保持一致,示例中为字符串类型的'2') - 先对原列表完成升序排序,再遍历排序后的列表定位目标元组,最后将其移至列表首位
- 如果列表中不存在包含指定起点的元组,函数将直接返回升序排序后的原列表
内容的提问来源于stack exchange,提问作者yyb12
相关产品推荐
相关产品推荐

