2008年4月24日木曜日

Python: クイックソート

このブログ記事をはてなブックマークに追加

Pythonクックブックに載っている3行クイックソート。

def qsort(L): if len(L) <= 1: return L return qsort([lt for lt in L[1:] if lt < L[0]]) + L[0:1] + qsort([ge for ge in L[1:] if ge >= L[0]])

これは美しい。ぱっと見て(自分にとっては)意味がすぐに読み取れるところも素晴らしい。

さらに短く1行に。

q=lambda x:(lambda o=lambda s:[i for i in x if cmp(i,x[0])==s]:len(x)>1 and q(o(-1))+o(0)+q(o(1)) or x)()

打って変わって邪悪感が漂うコード。これは(自分にとっては)一目では意味が掴めない…。

ただし、どちらも実際のコーディングには用いるべからず。高速な組み込みのsortedを使うこと。

これらはすべてPythonクックブックから。こんな珠玉のコードのちりばめられたPython クックブック 第2版はPythonista必携の書といえる。



ところで自分はPythonクックブックの初版を(ついでに英語版も)持っているが、3行クイックソートのコードに意味不明な Ä という文字が入っている。これは \ の誤植。今の版では直っているのかな。

0 コメント: