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

Python中如何实现类似Java Collections.sort()的对象排序?

在Python中排序自定义对象数组的方法

嘿,你已经把自定义类的比较魔法方法都实现到位了,这就搞定了最核心的部分!在Python里,对应Java中Collections.sort(objects)的功能,你有两个非常便捷的选择:

1. 使用内置的sorted()函数

这个函数会返回一个新的排序列表,原列表保持不变。用法很简单,直接把你的对象数组传进去就行:

# 假设你已经创建了多个Elev实例,存放在列表里
elev_list = [Elev("321"), Elev("12"), Elev("1234"), Elev("11")]
# 获取排序后的新列表
sorted_elev_list = sorted(elev_list)

2. 使用列表的.sort()方法

如果你想直接在原列表上进行原地排序(不生成新列表),就用这个方法:

elev_list = [Elev("321"), Elev("12"), Elev("1234"), Elev("11")]
# 直接修改原列表
elev_list.sort()

为什么这两个方法能直接工作?

因为你已经为Elev类实现了__lt__(小于)、__eq__(等于)以及对应的__gt__(大于)、__ne__(不等于)魔法方法。Python的排序机制会自动依赖这些比较方法来确定对象的顺序,和Java里实现Comparable接口后使用Collections.sort()的逻辑完全一致。

顺便补全一下你的类定义(你提供的代码里缺少类声明),这样可以直接运行:

class Elev:
    def __init__ (self, a):
        self.version = a
        self.length = int(len(a))
    def __lt__ (self, other):
        if self.length>other.length:
            short = other.length
        else:
            short = self.length
        for x in range(0, short, 2):
            if not int(self.version[x]) == int(other.version[x]):
                return int(self.version[x]) < int(other.version[x])
            if x==short-1:
                if self.length<other.length:
                    return True
                else:
                    return False
        return False
    def __gt__ (self, other):
        return other.__lt__(self)
    def __eq__ (self, other):
        first = self.__lt__(other)
        second = other.__lt__(self)
        return (not first) and (not second)
    def __ne__ (self, other):
        return not self.__eq__(other)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:27:39