Python

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':…

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…

メモ

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

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…

メソッドのself

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

関数にコードブロックを渡す

PythonでRubyのようにコードブロックを渡すやり方。デコレータを利用する。 >>> def each(L): ... def each_(func): ... for x in L: ... func(x) ... return each_ ... >>> L = range(10) >>> >>> @each(L) ... def pr(x): ... print '<', x, '>' ... < 0 > …

変数名と値の一覧を限定的にソースコードから取り出す

以下、parse_vars.py # coding: cp932 from compiler import parse, walk, ast class Visitor: def __init__(self, vars_d): self.vars_d = vars_d def visitAssign(self, node): var, val = node.getChildren() if isinstance(var, ast.AssName): if isinst…

メモ

forest book: Python の対話型プロンプトで補完機能を使う (http://d.hatena.ne.jp/t2y-1979/20080901/1220195104) 標準で入っていても良さそうだがreadlineモジュールは標準で入っていない。あとはPygmentsか何かでシンタックスハイライト機能もあったら面…

インタプリタ

『初めてのRuby』トークイベントの動画を見ていたら、Yuguiさんという人が、「Perl初心者の頃、後の方にある処理にエラーがあると前の方にある処理が実行されないところでつまづいた」というような発言をしていた。『初めてのRuby』では、そういうところを解…

unhashableなオブジェクトを辞書のキーにする

以下hashableな辞書クラス。 >>> class dict2(dict): ... def __hash__(self): ... return sum(sum(ord(x) for x in xx) for xx in self) ... >>> D = {} >>> D[dict2({'a':[], 'b':None})] = 1 >>> D[dict2({'a':[], 'b':None})] 1 以下hashableなリストク…

レキシカルスコープとダイナミックスコープ

Pythonはレキシカルスコープ(静的スコープ)である。Pythonは動的スコープの機能はない。 >>> x = 99 >>> def fooA(): ... print x ... >>> def fooB(): ... x = 1 ... fooA() ... >>> def fooC(): ... x = 2 ... fooA() ... >>> fooB() 99 >>> fooC() 99 foo…

文字コード

HDEラボ: PythonのUnicodeEncodeErrorを知る (http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html) PythonMatrixJp: 日本語文字列コード問題まとめ (http://python.matrix.jp/tips/string/encoding.html) Effective Python: 文字コード (http://mo…

メモ

変数はファーストクラスオブジェクトではないので、変数から変数名を取得できない。 変数から変数名を直接取得する簡単な方法がないので、取得したい場合は、リストや辞書などで関連付けしておく必要がある。 変数に関数オブジェクトを代入する場合は、関数…

辞書のキーと値を入れ替える(2)

例えば、辞書Dに対して以下のようにキーと値を入れ替えられる。dict(zip(D.values(), D)) 但し、これには以下の2つのことに注意する必要がある。 unhashableな値はキーになれない 重複した値は違うキーになれない この2つの事柄はdictに関する基本である。こ…

辞書のキーと値を入れ替える

牌語備忘録: 続・辞書のキーと値を入れ替えをPythonでやってみたの速度を計測してみた (http://d.hatena.ne.jp/CortYuming/20080811/p2) import timeit from timeit import Timer from operator import attrgetter a1 = """ def d_change_a(d): di = {} for …

MixinによるDuck Typing

d.y.d: イヌネコ (http://www.kmonos.net/wlog/88.html#_1337080801) リンク先の話題とは何も関係ないが、PythonでMixinを使用してDuck Typingを書いてみた。speakメソッド以外に共通のメソッドが増えれば、DRY原則から通常は継承することになるが、別に継承…

execによるmixin

以前の自分の日記(2008/2/21、2008/2/22)でimportによるmixinの方法を書いたが、『まるごとRuby!』のartonさんの記事を見て、execにより実現できることに気がついた。文字列を動的に作っても良いので結構応用範囲は広いと思う。k.inabaさんの『わなD』に似た…