亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于降序代碼問題?

def?reversed_cmp(x,?y):
????if?x?>?y:
????????return?-1
????if?x?<?y:
????????return?1
????return?0

課程里面說如果x 排在y前面,就返回-1;如果x排在y后面,就返回1;如果x==y,就返回0。這樣就能實現降序。但是為什么這樣就可以實現降序排序呢?x排在y前面,為什么不能返回1呢?很疑惑。。。

正在回答

2 回答

我覺得你理解錯了,你應該要明白實現降序或者升序的函數是sorted函數,而不是你自定義的revered_cmp().

而sorted函數的作用是接受一個比較函數對序列進行排列,而這個比較函數會根據返回值是-1,就會把 x 排在 y 前面,返回值是1,就會把 x 排在 y 后面,返回值為0,就把兩者并排。

所以你定義的reversed_cmp(),是作為sorted()的一個參數實現降序功能,因為sorted()默認的參數為cmp,只能進行升序排列,當然題目只是為了鍛煉我們自定義排序函數,實際上sorted()還有一個參數reverse,表示排序規則,reverse = True 降序 , reverse = False 升序(默認),可以方便的實現降序排列。

你可以看看http://www.runoob.com/python/python-func-sorted.html,加深理解。


1 回復 有任何疑惑可以回復我~
#1

T松子 提問者

謝謝謝謝,是不是這樣理解的: 比較函數的定義是,傳入兩個待比較的元素x和y,如果x應該排在y的前面,返回-1;如果x應該排在y的后面,返回1;如果x==y,返回0。revered_cmp是sorted()的一個參數,如果這個參數是-1,就會把x放在y前面(x > y);如果這個參數是1(x < y),x就會放在y后面;如果這個參數是0,表示這兩個數相等,從而實現降序。而默認的cmp()和revered_cmp()正好相反,如果這個參數是-1,也會把x放在y前面(但是x < y);如果這個參數是1,也會把x放在y后面(但是x > y);如果這個參數是0,表示這兩個數相等,從而實現了升序。
2019-01-24 回復 有任何疑惑可以回復我~
#2

T松子 提問者

所以cmp()函數是不是這樣的: def cmp(x, y): if x < y: return -1 if x > y: return 1 return 0
2019-01-24 回復 有任何疑惑可以回復我~
#3

慕容7012403 回復 T松子 提問者

對對對,你的理解完全就是我想表達的意思了!
2019-01-24 回復 有任何疑惑可以回復我~
#4

慕容7012403 回復 T松子 提問者

cmp()就是這個意思啦,而且python還內置cmp()這個函數呢,看這里http://www.runoob.com/python/func-number-cmp.html,跟你定義的完全一樣哦。
2019-01-24 回復 有任何疑惑可以回復我~
#5

T松子 提問者 回復 慕容7012403

非常感謝,終于理解啦,手動抱拳感謝
2019-01-24 回復 有任何疑惑可以回復我~
查看2條回復

可以進一步理解為兩個參數作差,前面的減去后面的,如果是正數,說明前面的大,就返回1,就不改變順序(前面的依然在前面,后面的依然在后面),反之,就改變以下順序。如果等于0,就無所謂。

現在經過對第一個和第二個數字進行比較,把實數集分成5部分。比小的還小,等于小的,介于大小之間,等于大的,比大的還大。


接下來再拿第三個數來跟前兩個數字來比,比較后放到正確的位置,然后再拿第四個數來跟前三個數來比較,放到正確的位置,依次類推……


以上全是我個人的理解和猜測,我覺得比較容易理解,如果有懂底層原理的大神,歡迎來指正。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

關于降序代碼問題?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號