2017-02-14 99 views
0

我想使用自定义顺序对列表进行排序,以至于无法转换为键(在Python 3中不存在更多sort(L,cmp= ..))。用自定义顺序对列表排序

我在订购时间间隔:I_k=[a_k,b_k]。订单是:

I_k>I_l (if a_k>a_l) OR (if a_k=a_l and b_k<=b_l) 

回答

0

最好的方法是创建一个小于比较函数的间隔类。

class Interval(list): 
    __gt__ = __ge__ = __le__ = NotImplemented 
    def __init__(self, l): 
     self.extend(l) 
    def __lt__(self, other): 
     print('help') 
     a_l, b_l = self 
     a_k, b_k = other 
     return a_k>a_l or (a_k==a_l and b_k<=b_l) 

L = [[0,1], [2,3], [0,2]] 
L = sorted(map(Interval, L)) 

print(L) # [[0, 2], [0, 1], [2, 3]]