emi*_*ess 7 python sorting key
我有一个向量数组,我想按长度排序:
class Vector:
def __init__(self, x, y):
self.x, self.y = x, y
def __add__(a, b):
return Vector(a.x + b.x, a.y + b.y)
def __str__(a):
return str(a.x) + ' ' + str(a.y) + '\n'
def __key__(self):
return self.x * self.x + self.y * self.y
a = []
a.append(Vector(1,2))
a.append(Vector(1, 1))
a.sort()
print("".join(map(str,a)))
Run Code Online (Sandbox Code Playgroud)
它说:"无法解决的类型:Vector()<Vector()"它要我创建lt,gt..方法.但是我想在不使用的情况下排序cmp.可能吗?
我将实现__lt__,__eq__然后使用functools.total_ordering类装饰器来获取其余的比较方法.
如果让你的矢量这样排序没有意义,那么你总是可以只使用key关键字sort(或者sorted就此而言):
mylist.sort(key = lambda v: v.x**2 + v.y**2)
Run Code Online (Sandbox Code Playgroud)
这里有两个变体:__cmp__在Vector类中实现函数或以这种方式执行排序:
...
a.sort(key=Vector.__key__)
Run Code Online (Sandbox Code Playgroud)
Python 文档说lt/le/gt/ge/eq/ne 是
\n\n\n\n\n[...] 所谓的 \xe2\x80\x9crich 比较 \xe2\x80\x9d 方法,并优先于 __cmp__() 调用\n 比较运算符
\n
如果您实现一个__cmp__(self, other)方法,它应该用于比较/排序操作。