旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

Pythonクックブックを読んでいる(5)

2009年3月9日

<< 前回 |
次回 >>

オラ、次の章(OOP)が気になって、ものすげぇ読み飛ばした気がすっぞ!

【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で先に困りそうな気がする。