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

如何排序元组列表并将含指定起点的元组置于首位?

配送最优路径查询应用的路径排序需求

问题背景

我正在开发一款配送最优路径查询应用,获取到的路径数据是元组列表:

[
    ('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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:45