2008-01-01から1年間の記事一覧

Python 3.0のrangeの注意点

Python 3.0をテストしていて驚いたのが以下の例。 >>> from timeit import * >>> t1 = Timer('L[5000]', 'L=range(10000)') >>> t2 = Timer('L[5000]', 'L=list(range(10000))') >>> t1.timeit() 0.61441663675145719 >>> t2.timeit() 0.1539030798605836 3.…

compact_number_listのパフォーマンス

とりあえずテスト結果の傾向のみメモ。 昨日のcompact_number_listをインデクシングを使ったリスト版とイテレータ版の時間を比較していたが、短いリストだとインデクシングの方が速いが、長いリストになるとイテレータの方が速い。compact_number_listではch…

再帰の考え方

まず例を見てみよう。 for i in range(10): print i 上記の例では、iの状態を0から9まで変えながらループしている。ここで、1つのループをフレームと呼ぶことにする。次に再帰のコード例を見てみる。 def fib(n): if n==0 or n==1: return 1 else: return fi…

リストの先読み

リストを先読みするには以下のようにイテレータを複製して、ポインタを必要な分だけ進めておく。そして並列に回す。 >>> from itertools import * >>> xs = range(7) >>> xs1 = chain(xs, [None, None]) >>> xs1, xs2, xs3 = tee(xs1, 3) >>> xs2.next() 0 >…

メモ

Develogger: codecsで使えるエンコーディング (http://www.r-stone.net/blogs/satoshi/2008/02/codecs.html) Pythonのcodecsで使用できるエンコーディングは「encodings」モジュールにあるようです。 ... WindowsXPでは「C:\Python25\Lib\encodings」になり…

メモ

compact-number-list (3) (http://d.hatena.ne.jp/morchin/20081006#p1) ファイル処理などのイテレータで先読みする場合にteeを使うとうまくいきそうなので、そのアイデアでcompact-number-listの拡張版の問題を時間あるときにパフォーマンスも含めて研究し…

Consリスト

Lisp プログラマのための Python 入門 (http://www.unixuser.org/~euske/doc/python/python-lisp-j.html) を読み直していて、PythonでLispのような連結リストを表現するのは (1, (2.0, ("three", None))) とあったので、これを基にして自分の「car, cdr, con…

Pythonクイズの回答(特異メソッド)

mopemopeのおらっちゃ富山県民やちゃあ: Pythonクイズ (http://d.hatena.ne.jp/mopemope/20081017/p1) Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more…

Pythonクイズの回答

Pythonクイズ: mopemopeのおらっちゃ富山県民やちゃあ (http://d.hatena.ne.jp/mopemope/20081016/p1) Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more…

3.0のメモ

C:\Python30\Lib\test\test_itertools.pyからのメモ >>> from itertools import * >>> >>> seq = range(4) >>> a, b = tee(seq) >>> next(b) 0 >>> list(zip(a, cycle(b))) [(0, 1), (1, 2), (2, 3), (3, 1)] >>> >>> seq = [1, 2, 3] >>> pairs = [(2**i, x…

Pythonクイズ(辞書の非破壊的操作)の解答

以下のようにdictコンストラクタが辞書自身とキーワード引数の両方をとれることを利用。 >>> d1 = {'a':1, 'b':2, 'c':3} >>> d2 = {'c':4, 'd':5, 'e':6} >>> print dict(d1, **d2) {'a': 1, 'c': 4, 'b': 2, 'e': 6, 'd': 5} >>> d1 {'a': 1, 'c': 3, 'b':…

メモ

ときどきの雑記帖 i戦士篇 Python遣いのためのScala入門 その1 (Scala for Pythonistas: Part 1) (http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0809c.html#D20080929-6) Scala for Pythonistas: Part 2 (http://finitestate42i.blogspot.com/2008_09_…

Pythonクイズ(辞書の非破壊的操作)

以下の?????を埋めよ。但し文字数の指定はない。解答はいくつかあると思うが後日。 >>> d1 = {'a':1, 'b':2, 'c':3} >>> d2 = {'c':4, 'd':5, 'e':6} >>> print ????? {'a': 1, 'c': 4, 'b': 2, 'e': 6, 'd': 5} >>> d1 {'a': 1, 'c': 3, 'b': 2} >>> d2 {'c…

メモ

ancient-vの日記: 重複順列生成 - evalで再帰いらず (http://d.hatena.ne.jp/ancient-v/20081004/1223147239) 「そうかジェネレータ式で必要なだけ for を連ねればいいんじゃん!」 ... ジェネレータ式を文字列で作って eval すりゃいい forループのn次元化(…

2.6関連のメモ

inforno: Python2.6変更点まとめ (http://inforno.net/articles/2008/10/03/python26-features) name-3333's memo: Python2.6 Fractionクラス (http://d.hatena.ne.jp/name-3333/20081004#1223146709) mopemopeのビビット☆パステル☆レインボー日記: python2.…

compact-number-list (3)

stepに対応するようにして、さらにイテレータ(無限リスト)に対応するように拡張してみた。 from itertools import izip def count2(start, step=1): cnt = start while True: yield cnt cnt += step def compact_number_list(seq): seq = iter(seq) curr, ne…

メモ

[Python-ml-jp 4518] Re: 順序を保ったまま重複を取り除きたい (http://www.python.jp/pipermail/python-ml-jp/2008-September/004515.html) ifilterを使用した方法iuniq2を実装した。ifilterを使用した方法iuniq2とmlに載っている方法iuniqの時間を比較して…

PYTHON 3

Guidoのインタビュー on Linux Journal (http://www.python.jp/pipermail/python-ml-jp/2008-October/004518.html)

メモ

>>> def id(*args): ... return args ... >>> zip(range(1,11), range(11,21)) == map(id, range(1,11), range(11,21)) True Haskell Python zip zip(2引数) zipWith map(f, 2引数) map map(f, 1引数) Haskellは、可変長引数の抽象化に弱い?

compact-number-list (2)

6.5.2 Exampla (http://docs.python.org/lib/itertools-example.html) Pythonのマニュアルにめちゃくちゃうまいやり方が載っていた。 >>> data = [ 1, 4,5,6, 10, 15,16,17,18, 22, 25,26,27,28] >>> for k, g in groupby(enumerate(data), lambda (i,x):i-x…

メモ

SumiTomohikoの日記: __build_class__ (http://d.hatena.ne.jp/SumiTomohiko/20080926/1222448134) 3.0から入った機能らしい。あまり使い道が思いつかないがあとでチェック。

compact-number-list

昨日のひげぽんさんのお題のPython版。 def compact_number_list(L): if len(L) < 2: return L L2 = [[L[0]]] for i, v in enumerate(L[1:]): if L2[-1][-1] + 1 == v: L2[-1].append(v) else: L2.append([v]) L3 = [] for vs in L2: if len(vs) == 1: L3.ap…

整数リストの変形

ひげぽん OSとか作っちゃうかMona-: Scheme どう書く?的 (http://d.hatena.ne.jp/higepon/20080925/1222326246) 整列済みの number のリストがある。 '(1 3 4 5 6 12 13 15) このようなリストで数が連続している部分は '(1 2 3) -> '(1 . 3) のように両端の…

関数型言語の考え方

以下は私のHaskellなどの関数型言語に対する理解。先日リンクしたHaskellのPPTを見てイメージできた。私は関数型に関して素人なので間違いを含むかも。 for, whileなどのループの制御文は、内部イテレータな「高階関数」は内部に再帰を含んでいると思われる…

メモ

PythonでCleanやHaskellのリスト相当を準備 (http://pgkiss.web.fc2.com/functionalPython/1.html) あとでPythonでの実現方法を勉強してみるつもり。

ScalaからGroovyへ

昨日前の会社の先輩からGroovyという言語を教えてもらった。以下Wikipedia(http://ja.wikipedia.org/wiki/Groovy)からの引用。 その他、Python、…などからも言語機能が取り込まれている。 Groovyではコードブロックをファーストクラス(一級市民)オブジェク…

car, cdr, consと無限リスト

昨日のHaskellの資料のエラトステネスのふるいを元に無限リストの扱いを考えてみた。Pythonのcar、cdr、consは、jijixiさんのコードを拝借(http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20070101#p01)。 -- Haskell sieve [] = [] sieve (p:ps) = p…

メモ

「ときどきの雑記帖 i戦士篇」日記経由でメモ。あとで読む。 Haskell プログラミング 〜 純粋関数型言語への誘い〜(http://www.mew.org/~kazu/haskell.pdf) 以下、Python版の実装。出典元は省略。 クイックソート def qsort(L): if len(L) <= 1: return L re…

〜使い

一覧表が見つからなかったのでまとめてみた。ご指摘大歓迎。 Python Pythonista Ruby Rubyist Perl Perl Monger PHP PHPer (ぺちぱー) Scheme Schemer Lisp Lisper ML MLer Java Javanese C# C#er (C Sharper) C C屋、Cげんがー C++ C++屋、Cぷらぷらー Delp…

メソッドのself

最近『初めてのRuby』を読んでいる。Pythonのメソッドの第一引数にselfを書かなくてはいけないが、Rubyと対比して理由がなんとなく分かったので検討してみる。 まずPythonではRubyと同様、インスタンスメソッドとトップレベル関数の区別がない。Pythonではメ…