[問題] 如何自行定義排序方法

看板Python作者 (Kagi)時間15年前 (2010/05/09 22:13), 編輯推噓3(306)
留言9則, 4人參與, 最新討論串1/2 (看更多)
python裡面內建的sorted算是方便的方法, 但是小弟沒能試出來sorted能不能使用自己定義的方式作排序。 小弟現在了解的有: 設一個list=[(9,'abc','def'),(1,'eud','abc'),(4,'edu','xxx')] 如果用 sorted(list,key=lambda x:x[0]) 會輸出 [(1, 'eud', 'abc'), (4, 'edu', 'xxx'), (9, 'abc', 'def')] (順序:1>4>9) sorted(list,key=lambda x:x[2],reverse=True) 會輸出 [(4, 'edu', 'xxx'), (9, 'abc', 'def'), (1, 'eud', 'abc')] (x>d>a) sorted(list,key=lambda x:x[1]) 會輸出[(9, 'abc', 'def'), (4, 'edu', 'xxx'), (1, 'eud', 'abc')] (ab>ed>eu) sorted(list,key=lambda x:x[1][1]) 會輸出[(9, 'abc', 'def'), (4, 'edu', 'xxx'), (1, 'eud', 'abc')] (a"b"c > e"d"u > e"u"d) 那麼,如果小弟想讓list用tuple的第二項排, 並以"aeioubcdf....stwxyz"的方式排序, (預期輸出結果是 [(9,'abc','def'),(1,'eud','abc'),(4,'edu','xxx')]) (因為 ab>eu>ed) 要用什麼方式讓python知道我要的排序方法呢? 還是要加入另外的函式? -- 傑米,炸掉它吧。 ⊙─ ─⊙▂⊙ 碰到問題,用C4就對了! █◤ Adam Savage Jamie Hyneman MYTHBUSTERS by dajidali -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.194.168

05/09 22:36, , 1F
他不是有個cmp參數可以讓你丟比較用的函數進去嗎?
05/09 22:36, 1F

05/09 23:52, , 2F
相關的 post: #1AAE94ff
05/09 23:52, 2F
抱歉忘了先講, 小弟用的是3.1.2版,似乎沒有cmp... ※ 編輯: KagiJhou 來自: 140.117.194.168 (05/10 08:11)

05/10 10:31, , 3F
你沒事用 python3 作什麼
05/10 10:31, 3F
呃......這跟我的問題有什麼關係嗎? 還是3以上的版本沒辦法用自己設計的排列順序? ※ 編輯: KagiJhou 來自: 140.117.194.168 (05/10 10:59)

05/10 11:03, , 4F
Use functools.cmp_to_key() to convert an old-style
05/10 11:03, 4F

05/10 11:03, , 5F
cmp function to a key function.
05/10 11:03, 5F

05/10 11:03, , 6F
05/10 11:03, 6F

05/10 11:08, , 7F
05/10 11:08, 7F

05/10 23:47, , 8F
試了一下,3.1.2版似乎沒有 cmp_to_key。總之感謝各位。
05/10 23:47, 8F

05/11 18:32, , 9F
所以有不使用cmp的方法嗎?
05/11 18:32, 9F
文章代碼(AID): #1BviCdkB (Python)
討論串 (同標題文章)
文章代碼(AID): #1BviCdkB (Python)