Python

reduce と sum #2

ref:http://lowlife.jp/mft/weblog/2007/06/24.html ネタがかぶったかと思いきや全然そんなことはなかった。

整数とビット列の相互変換

ref:http://www.nishiohirokazu.org/pwe2007/2007/06/post_7.html Python って関数型言語ですよね。 ちなみに、変換数値の上限がない代わりに負数非対応。というか Python は自動的に数値の範囲を拡張するからちゃんとやろうとするとかなり面倒そう。 import…

名簿の並び替え

ref:http://www.nishiohirokazu.org/pwe2007/2007/06/post_5.html 適当にオプションで切り替えられるように。そしてファイルの入出力は UNIX 流儀で。 import sys, fileinput class Person(object): __slots__ = 'firstname lastname'.split() def __init__(…

sum と reduce

今日、list に対しても sum が使えることに気づいた。ということは以下の2つは等価だ。 import operator reduce(operator.add, [[1, 2, 3], [4, 5, 6], [7, 8, 9]], []) sum([[1, 2, 3], [4, 5, 6], [7, 8, 9]], []) じゃあ __add__ が定義されていればなん…

行列の回転

ref:http://www.nishiohirokazu.org/pwe2007/2007/06/post_4.html ひたすら手続き的な記述をさけてみる。 def rotater(matrix): """ rotate matrix >>> rotater([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) [[7, 4, 1], [8, 5, 2], [9, 6, 3]] """ return [list(row…

入れ子リストの中身を順に表示

ref:http://www.nishiohirokazu.org/pwe2007/2007/06/post_3.html 問題文からいまいち仕様が読み取りにくい。こんなのでいいのかな。 import operator def flatten(obj): """ flatten specified nested list. >>> flatten([1, [2, 3, 4], 5, [[6], [7, 8], 9…

単語数カウント

ref:http://www.nishiohirokazu.org/pwe2007/2007/06/post_1.html まじめにやろうとすると、sentence split して tokenize しないといけないんだけど、まぁ、さすがにその辺は手抜き。なので、U.S.A. だとか Mr. だとかはうまく処理できない。 しかし、filei…

callable

ref:http://shinh.skr.jp/m/?date=20070617#p04 まぁ、コメントに書いた通り呼び出し可能かどうかは callable を使えばわかるんですけど。 で、hasattr(obj, '__call__') でも条件を満たせるかといえばなぜか classic class (new-style でない class) で挙動…

プレゼン

キミならどう書く ?プレゼンソフトを作る?LLイベントではすっかり恒例になりました「キミならどう書く」、今年はプレゼンテーションソフトウェアを作ります。いくつかの言語で実装していただき、もちろんそのソフトウェアを使ってプレゼンをしていただきます…

漢数字/英数字

ref: [ネタ][プログラミング] 漢数字カウンタ その弐 - 航海日誌 (2007-06-01) ああ,これややこしいわ. これは大学のプログラミング実習ネタとしても十分使えると思う. 確かに。200000001 なんかをきちんと変換できるか試してみたりとか。分かってしまえ…

キーワード引数

ref:Life is beautiful: 「パラメーターのプロパティ渡し」でプログラムを読みやすくする、というアイデアはどうだろう それ、Python なら以下のようにできる。 class Fish(MovieClip): def __init__(self, speed, direction, x, y, minDistance, maxInfluce…

reducel, reducer

ref:404 Blog Not Found:Code Snippets - reduce(l|r)を実装汁! ふむ。Python でやってみるべ。 sequence だけを対象にするなら、簡単。さすがに10分もいらない。 def reducel(func, l): result = l[0] for item in l[1:]: result = func(result, item) retu…

Python 2.4.3 では FD_SETSIZE 以上のファイルディスクリプタを扱えない

Mac でやってて嵌ったのでメモ。 Python 2.4.3 の Modules/socketmodule.c を見ると、send/recv/accept なんかにこんなコードがある。 if (!IS_SELECTABLE(s)) return select_error(); select_error はエラー文字列を設定するだけのコード。 で、IS_SELECTAB…

101

ref:http://d.hatena.ne.jp/Isoparametric/20070510/1178770443 やっぱり、range(1,101)という1から100までの数を得る中で101という関係ない数字が見えてしまうのは何だか違和感があるですねぇ。 あー、すごいわかる。自分も同じことを思った。 で、まぁそう…

FizzBuzz

なんかはやりすぎだと思った。 じゃ、ま、こんなのでも。 from itertools import izip, repeat def chain(iterable): for it in iter(iterable): for i in iter(it): yield i def take(n, iterable): it = iter(iterable) for i in xrange(n): yield it.next…

パイプラインで Emacs に出力を流し込む

軽く文句をつけつつも、wgrep はなかなか良さげ、ということで行番号付きでリンクしたり、実体参照変換 + 行番号付加 な私家版を作ってたりする。 で、Emacs 使いならやっぱり Emacs で結果を閲覧できればいいんじゃね、ということで Emacs にパイプできない…

エンコーディング変換の高速化

ref:404 Blog Not Found:perl tips - Encodeを速く使う方法 当然の話だけど、対象の文字列が長くなると、Encode::encode も、$e->encode も大差ない。 ちょっといじって試してみる。 use strict; use warnings; use Benchmark qw/cmpthese timethese/; use u…

sary python binding

なんか、見つからなかったから、かっとなって sary の python binding とか作ってみた。自分の使う API だけ。 気が向いたら公開するかも。 時間があればフルスクラッチで書いたほうがいいような気もするが、まぁどうでもよい。

クラスメソッドの抽出 #2

okuji さん曰く 素直にinspect.classify_class_attrsを使ってはどうでしょうか。 あー、標準にそんなモジュールが。というわけでコレを使えばこうなりますね。 import inspect def get_class_methods(klass): return [attr[0] for attr in inspect.classify_…

京都大学コーパスのパーズ

ref:Darkness:Cabocha_tree_analyze - livedoor Blog(ブログ) コードを見る限り cabocha -f1 としたときの出力の解析みたいだけど、あれは CaboCha 特有のフォーマットじゃなくて京都大学コーパス由来のフォーマットだと思います! で、ちょっと真面目に解…

クラスメソッドの抽出

havana から「クラスメソッドだけを引っ張り出す方法ナイ?」って話を振られて、今日はそれで遊んでた。 が、どーも「これだ!」と思えるものが出てこない。 im_self を参照すればいいんじゃないでしょうか。 def get_class_method_list(klass): return [nam…

ディレクトリ構造を保ったままフィルタ #2

なんか、昨日書いたスクリプトを 10 GBytes くらいのデータの処理に使ってたら途中で止まりやがった。 /home/oda/opt/stow/ruby-1.8.5_amd64/lib/ruby/1.8/thread.rb:203:in `stop': stopping only thread (ThreadError) note: use sleep to stop forever fr…

相変わらず

ref:Perl, Python, Ruby の比較 以前の指摘で、一部訂正されたみたいなんだけど、相変わらずだったりするようで。 Perl: 引数をフラットなリストに変換して値渡し。参照渡しをするにはプロトタイプを用いる。少し複雑。 Python: 参照渡し。ただし、変更不能…

辞書に登録されている語をテキスト中から検索する

ref:裏表(Phinloda のもう裏だか表だか分からないページ) | メモ: パターンマッチのちょっとした問題 ref:裏表(Phinloda のもう裏だか表だか分からないページ) | メモ: パターンマッチのちょっとした問題 (2) あー、Computer Science 的にそういうのは AC 法…

続 Python で Suffix Array の構築

ref: Suffix Array - enbug diary (2007-02-13) むむ。そか、naive に1文字づつ切り出して比較するより、適当なサイズごとに比較してやったほうが速いよな、そりゃ。 そもそもの問題はコピーを作らずに比較できないことなのだけれど、 Python 3000ではsubstr…

immutable object の slice

最近気づいたんだけど、Python の tuple や str って slice 作ったときに領域コピーされているっぽい。 つまり l = tuple(range(10000)) m = [l[i:] for i in xrange(1000)] とかやるとすごいメモリを食う感じ。list なら仕方がないかと思うんだけど、tuple …

Python で Suffix Array の構築

import codecs, re def most_long_match(a, b, array, i=1): while cmp(array[a:a+i], array[b:b+i]) == 0: i += 1 if len(array) - a == i: break return cmp(array[a:a+i], array[b:b+i]) mat = re.compile('<.+?>') fp = codecs.open('04.txt', 'r', 'utf…

Lispっぽく

ref:バカが征く ref:2006年 如らぎ (1)。 func(a) を何回も書きたくないんじゃないかなぁ、と勝手に想像。つか直接聞けば済む話なんだけど、今、週末だし。 それはともかく、Lisper っぽい書き方で。いや、自分は Lisper じゃないけど。 #!/usr/bin/env pyth…

格子点の生成

任意次元の格子点を(大量のメモリを使うことなく)生成するコードを出来るだけ汎用的に書いてみるテスト。 Python ならかなり簡単に書ける。generator(コルーチン)万歳。 def mesh(*points): if len(points) == 1: for x in points[0]: yield [x] else: for p…

JavaScript と Python

JavaScriptをまともにした言語なんじゃないかとか。 delete とかは生きた。 えー。マジレスすると JavaScript より Python のほうが古くね?