首先基本的应用请参考其它教程,百度很多。
现有列表ll=[(1,2),(4,5),(8,9),(1,1),(4,3),(8,20)],要实现排序,排序规则为:按元组第一个元素降序,如果元祖第一个元素相同按元祖第二个元祖升序。
import functools
def tcmp(x,y):
#只能返回[-1,0,1]分别对应逆序,不变,升序
if x[0]!=y[0]:
#因为排序默认为升序排序,所以在x[0]>y[0]情况下,要想让x[0]在y[0]前面
#也就是逆序,所以要返回-1
return -1 if x[0]>y[0] else 1
elif x[1]!=y[1]:
return 1 if x[1]>y[1] else -1
else:
#按原来顺序
return 0
if __name__=="__main__":
ll=[(1,2),(4,5),(8,9),(1,1),(4,3),(8,20)]
ll.sort(key=functools.cmp_to_key(tcmp))#python3没有cmp关键字,所以必须把cmp函数转换为key
print(ll)
输出:[(8, 9), (8, 20), (4, 3), (4, 5), (1, 1), (1, 2)]