我的评论的完整例子
list.sort(reverse=True, key = lambda x: (x.rank, x.distance))
应该有效-如果连续的x.rank相等,它将按距离升序排序-问题是:距离到什么…你不能做点之间的相对距离-更像是每个点到f.e.中心的总距离(0,0)[即一个预先计算的距离…]
class p:
def __init__(self, r, d):
self.rank = r
self.distance = d
def __str__(self):
return f'{self.rank}|{self.distance}'
def __repr__(self):
return str(self)
ranks = [1,2,3]
distances = [10,30,10]
data = [p(r,d) for r in ranks for d in distances]
print(data)
# sort by max rank, min distance
data.sort(key=lambda x:(-x.rank, x.distance))
print(data)
输出:
# created data
[1|10, 1|30, 1|10, 2|10, 2|30, 2|10, 3|10, 3|30, 3|10]
# sorted by max rank, min distance
[3|10, 3|10, 3|30, 2|10, 2|10, 2|30, 1|10, 1|10, 1|30]