それなりブログ

とあるWebエンジニアのそれなりのブログ、JavaScript/Node.js/Python/PHP/ゲーム作成 など

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

<< 前回 |
次回 >>

オラ、次の章(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で先に困りそうな気がする。


2 Responses to “Pythonクックブックを読んでいる(5)”

  • pasela より:

    「不正確」ってのはちょっと違和感あるなぁ。
    一般的には「安定なソート」と「安定でないソート」だよね。
    ソートアルゴリズムは結構面白いし、資格試験にもよく出るので勉強してみるといいかもしれず。
    特に安定かどうかってのは実務でも重要だぜw

  • kjirou より:

    ウィキペをナナメ読みだけだと
    「安定」の意味が掴めなくて、そういう書き方に・・・。
    heapqを使いたいなー
    と、思ったときに調べます!


Categories

Archives