首先基本的應用請參考其它教程,百度很多。
現有列表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)]