Re: [問題] sorting的問題
http://www.python.org/dev/peps/pep-0008/#indentation
請盡量使用四個空格縮排
※ 引述《Arim (Arim5566)》之銘言:
: 各位版友好
: 如果我有一個point的class
: class point:
: def __init__(self,x,y):
: self.x=x
: self.y=y
: 以及一個Line的class
: class Line:
: def __init__(self,p1,p2):
: self.p1=p1
: self.p2=p2
sorted 和 list.sort 都保證 stable
也就是說如果兩個項目 key 值相等, 它們的先後順序不會因為排序而改變
所以最簡單的方法就是從最不重要的項目往前排回來
(為什麼是這樣就交給你自己想了)
: p1跟p2是Point的Instance
: 其中每個Line的instance的p1會比p2小(先比x再比y)
: 現在要排序一個放Line的instance的list
: 比較每個Line的instance也是先比p1再比p2
: 而每個Line的point(也就是p1跟p2)在比較的時候也是先比x再比y
: 例如排序四條Line之後會變成:
: l1 0 150 150 150 #格式為p1.x p1.y p2.x p2.y
: l2 150 0 150 150
: l3 150 150 150 600
: l4 150 150 600 150
這種時候用 lambda 會方便一點
http://codepad.org/GFV0g05v
(竟然不支援 new format print!超爛的!)
或者, Python 在比較大小的時候其實是呼叫物件的隱藏運算子函式
所以你可以直接 override 運算子函式達成運算子重載進而讓該物件能被排列
http://codepad.org/SnHpT4EX
其實好像只要 __lt__ 和 __gt__ 挑一個就夠了, 不過保險起見還是都寫
其他還有很多可以重載的, 有興趣可以自己 google Python operator overloading
量大的時候要用夜用...我是說, 資料量大的時候後面那種方式效率會比較好
自己照需求選用吧
Edit: 原 po 好像沒發現我程式碼貼錯, 趕快偷改XD
--
╱ ̄ ̄ ̄╲
▏◢█◣ ▏
︻█︻█ ▏ 成龍表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
推
11/08 23:12, , 1F
11/08 23:12, 1F
※ 編輯: uranusjr 來自: 114.32.81.146 (11/08 23:19)
推
11/09 03:24, , 2F
11/09 03:24, 2F
→
11/09 03:26, , 3F
11/09 03:26, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章
14
26