2005-08-01から1ヶ月間の記事一覧

事例:入れ子になったリストを平坦化する

平坦化したリストが得られます *1。 def asSequence(s): if isinstance(s, list): return reduce(lambda acc,c: acc+asSequence(c), s, ) else: return [s] def flatten(s): return reduce(lambda acc,c: acc+asSequence(c), s, ) >>> s = [1,[2,3],[4,[5,6]…

事例:文字列を連結する

その順序を逆にした文字列が得られます。 >>> s = "ABC" >>> reduce(lambda acc,e: e+acc, s, "") 'CBA' これは、式 (("C")+"B")+"A" を評価したのと同じ結果になります。 acc e acc+e (1) "" "A" "A"+"" (2) "A" "B" "B"+"A" (3) "BA" "C" "C"+"BA" こうし…

《関連記事》

2008-05-19 ソースコードの歩き方《IronPython》reduce inject:into:/Smalltalk → Smalltalk use: better《26》これは要るけどこれは要らないかな iterate 演算/OCL → Java.use(better) NITRIS 問題《8》そして何度も繰り返す ハッシュ表 → Python.use(bette…

組み込み関数:reduce

まず、組み込み関数 reduce のヘルプ情報を確認します。 >>> help(reduce) Help on built-in function reduce in module __builtin__: reduce(...) reduce(function, sequence[, initial]) -> value Apply a function of two arguments cumulatively to the …

《こちらに引越中です》

Python.use(better, for=C#) 《記事一覧》 組み込み関数 reduce 《著》後藤いるか・森こねこ《監修》小泉ひよ子とタマゴ倶楽部第0版♪1988/03/30 ● 第1版♪2000/05/23 ● 更新♪2008/10/28

事例:総和を求める

1から5までの数の和/積が得られます。 >>> s = range(1,6); s [1, 2, 3, 4, 5] >>> reduce(lambda acc,e: acc+e, s, 0) 15 >>> reduce(lambda acc,e: acc*e, s, 1) 120 lambda 関数の第1引数 acc には、初期値として 0 が設定されます。第2引数 e は、リ…

集合:set〈第3版〉

>>> s = set() >>> for e in "ABC": s.add(ord(e)) >>> s set([65, 66, 67]) 空の集合 s に対して、メソッド add を使って各要素を追加します。同じことはジェネレーター式を使うと、次のように簡潔に表現できます。 >>> set(ord(e) for e in "ABC") set([65…

タプル:tuple

>>> tuple(ord(e) for e in "ABC") (65, 66, 67) 組み込み関数 tuple の引数に、各要素を生成する式 ord(e) を指定するとともに、文字列の各要素 e を参照する方法を記述します。制御構造を表わす for を引数内に記述できるので、簡潔で見通しの良いコードを…

リスト:list

>>> list(ord(e) for e in "ABC") [65, 66, 67] 組み込み関数 list の引数に、各要素を生成する式 ord(e) を指定するとともに、文字列の各要素 e を参照する方法を記述します。制御構造を表わす for を引数内に記述できるので、簡潔で見通しの良いコードを記…

内包を使って

組み込み関数 ord を使うと、 >>> help(ord) Help on built-in function ord in module __builtin__: ord(...) ord(c) -> integer Return the integer ordinal of a one-character string. 文字 c の ASCII コード(整数値)が得られます。そこで、任意の文…

《こちらに引越中です》

Python.use(better, for=C#) 《記事一覧》 ♪ 《著》後藤いるか・森こねこ《監修》小泉ひよ子とタマゴ倶楽部第1版♪2000/05/23 ● 第2版♪2003/01/29 ● 第3版♪2007/05/12 ● 更新♪2008/10/22

辞書:dict

>>> m = {} >>> for e in "ABC": m[e] = ord(e) >>> m {'A': 65, 'C': 67, 'B': 66} 空の辞書 m に対して、演算子 []= を使って各要素を追加します。同じことはジェネレーター式を使うと、次のように簡潔に表現できます。 >>> dict((e,ord(e)) for e in "ABC…

ジェネレーター式を使って〈第2版〉

さらに、内包に代わって、ジェネレーター式を使うと便利です。 《Note》ジェネレーター〔generator〕が導入されるのに、Python 2.2 まで待たねばなりませんでした。コルーチンを記述できる環境(Modula-2 など)と比べて、本格的にマルチスレッドを導入する…

《こちらに引越中です》

Python.use(better, for=C#) 《記事一覧》 ♪ 《著》後藤いるか・森こねこ《監修》小泉ひよ子とタマゴ倶楽部第1版♪2000/05/23 ● 第2版♪2003/01/29 ● 第3版♪2007/05/12 ● 更新♪2008/10/22

文字列:str

文字列は、組み込み型 str のオブジェクトです。C# では、String 型に相当します。 >>> "ABC" 'ABC' 文字列は、引用符「"」または「'」で囲んで表現します。 《Note》この記事では(原則として)入力するときには、二重引用符「"」で囲まれた文字列を利用し…

辞書:dict

辞書は、組み込み型 dict のオブジェクトです。C# では、クラス Dictionary(TKey, TValue) に相当します。 >>> dict((e,ord(e)) for e in "ABC") {'A': 65, 'C': 67, 'B': 66} 任意の要素対(キー/値)を列挙したものです。括弧 {} で囲まれた中に、各要素対…

集合:set〈第3版〉

集合は、組み込み型 set のオブジェクトです。 >>> set("ABC") set(['A', 'C', 'B']) 任意の要素を列挙したものです。型の名前を表わす set の後に、括弧 () で囲まれた中に、各要素を list と同じ形式で表現します。 >>> for e in set("ABC"): print e, A C…

タプル:tuple

タプルは、組み込み型 tuple のオブジェクトです。 >>> tuple("ABC") ('A', 'B', 'C') 任意の要素を列挙したものです。括弧 () で囲まれた中に、各要素をカンマ「,」で区切って表現します。ただし、オブジェクトを生成した後で、各要素を変更できません。 >>…

リスト:list

リストは、組み込み型 list のオブジェクトです。C# では、クラス ArrayList に相当します。 >>> list("ABC") ['A', 'B', 'C'] 任意の要素を列挙したものです。括弧 [] で囲まれた中に、各要素をカンマ「,」で区切って表現します。 >>> for e in list("ABC")…