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

如何用Python的sort方法实现对象列表半排序(指定id移至末尾)

使用sort方法实现指定id对象移至列表末尾

首先,你定义的packet类和对象列表如下:

class packet():
    def __init__(self, id, data):
        self.id, self.data = id, data

my_list = [packet(1,"blah"),packet(2,"blah"),packet(1,"blah"),packet(3,"blah"),packet(4,"blah")]

你已经通过列表推导式实现了需求(注:原代码存在两处笔误,已修正):

def semisort(data, target_id):
    return [o for o in data if o.id != target_id] + [o for o in data if o.id == target_id]

semisort(my_list, 1)

基于sort方法的Python风格实现

可以利用list.sort()方法的key参数,通过给目标元素设置排序权重来实现需求:

def semisort_with_sort(data, target_id):
    # 创建列表副本,避免修改原列表;若允许直接修改原列表,可直接调用data.sort()
    sorted_list = data.copy()
    sorted_list.sort(key=lambda x: x.id == target_id)
    return sorted_list

# 调用示例
result = semisort_with_sort(my_list, 1)

实现原理

  • 匿名函数lambda x: x.id == target_id会返回布尔值:元素id等于目标id时返回True,否则返回False
  • Python中布尔值的排序规则为False < True,因此所有非目标id的元素会排在前面,目标id的元素会自动移至末尾
  • list.sort()是稳定排序,原列表中非目标id元素之间、目标id元素之间的相对顺序会被保留

如果允许直接修改原列表,写法可以更简洁:

my_list.sort(key=lambda x: x.id == 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:27:46