Pythonクックブックを読んでいる(5)
2009年3月9日
【5章 サーチとソート】
5.3 オブジェクトの属性でソート
これでいいんだってサ!
import operator sorted(seq, key=key=operator.attrgetter(attr))
本当かよ!!
class Foo(object): def __init__(self): self.hoge = None def __repr__(self): return str(self.hoge) f1 = Foo() f1.hoge = 1 f2 = Foo() f2.hoge = 2 f3 = Foo() f3.hoge = 3 import operator print sorted([f2, f3, f1], key=operator.attrgetter('hoge')) # -> [1, 2, 3]
本当だ!!!
5.0 オブジェクトの比較は高コスト
「Pythonにおいて、・・・、2つのオブジェクトの比較とは、
関係するオブジェクト指向メカニズムの全てにコストのかかる、高価な処理なのだ。」
(引用なんだけど、一部略で補足を除去)
気持ち程度に気にしとこう。
5.7 アイテムが加えられてもソート済みに保つ
アイテムの追加や削除の度にリスト全体を再ソートしたくない場合はheapqを使う。
l = [888, 111, 22, 45, 234, 9, 765] import heapq heapq.heapify(l) print l[0], l[-1] # -> 9 765 # 追加 heapq.heappush(l, 3) print l[0], l[1] # -> 3 9 # 削除 heapq.heappop(l) print l[0], l[1] # -> 9 45
ヒープソート自体良くわかってないんだけど、list.sortよりも「早くて不正確」な感じらしい。
・・・以上。
性能対策に適切なソートを使いましょう、というネタが多く、
基本的なソートのアルゴリズムすら知らない自分には時期尚早な感が・・・。
困ったら開こう!(こればっか)ということで終わりにした。
てか、むしろこの辺は、サーバサイドの言語よりもJSとかASで先に困りそうな気がする。