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
相关产品推荐
相关产品推荐

