看板 Python 關於我們 聯絡資訊
zerodevil:就這個例子來說給key會比較簡單xd11/16 22:09
看了z大的推文去查了一下用法 key這個引數是用來指定一個函數f, 將list的元素i用f(i)的大小來排序 GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11'] 以這個例子來說,我要比的是 int(i.split('.')[1]) 的大小 因此 key = lambda x: int(x.split('.')[1]) 只要用 GG.sort(key = lambda x: int(x.split('.')[1])) 就可以得到結果 假如不喜歡用lambda的話,另外定義函式也是可以的 def f(x): return int(x.split('.')[1]) GG.sort(key=f) 也會得到一樣的結果 ※ 引述《mantour (朱子)》之銘言: : sort可以傳入自訂的比較函式進去 : 例如你是想要把 . 後面的數字當作整數來排序 : 可以這樣 : def myCompare(a,b): : if( int(a.split('.')[1]) > int(b.split('.')[1]) ): : return 1 : elif(int(a.split('.')[1]) < int(b.split('.')[1]) ): : return -1 : else: : return 0 : GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11'] : GG.sort(cmp=myCompare) : 就會得到你要的結果了 : ※ 引述《g9678007 (HKE)》之銘言: : : 抱歉,剛剛有點太慌亂。 : : 小弟是要排序 例如 GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11'] : : 我想要照數字大小排序 : : 但是如果利用GG.sort() 會變 : : ['NM_M_3.11', 'NM_M_3.13', 'NM_M_3.3'] : : 他變成只排序小數點後面1然後由小到大 : : 我想要的是 : : [ 'NM_M_3.3','NM_M_3.11', 'NM_M_3.13'] : : 問題是卡在字串裡面前後都夾很多字串,我有想過直接把字理的 : : 3.3 3.11 3.13 取出來在轉float比大小就不會有這問題,但是每次的檔名 : : 都不是很規則不能單純任位子 : : 我在舉個例像 : : GG=['NM_M_3.3','NM_M_3.13','NM_M_3.11','NM_M_3.9','NM_M_3.1'] : : GG.sort() : : ['NM_M_3.1', 'NM_M_3.11', 'NM_M_3.13', 'NM_M_3.3', 'NM_M_3.9'] : : 問題是我想要的是 : : ['NM_M_3.1', 'NM_M_3.3', 'NM_M_3.9', 'NM_M_3.11', 'NM_M_3.13'] : : 單純用python語法可以做到嘛? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.158
g9678007:wow thx 受教了 11/17 08:51