Python のイテレータ の続き。
1. Ruby の Enumerable モジュールのメソッドを分類する
Ruby でイテレータを書くときは、要素を保持するコンテナとなるクラスで、
- Enumerable モジュールをインクルードし、
- each メソッドを定義する。
イテレートされる、要素となるクラスでは、
- Comparable モジュールをインクルードし、
- <=> メソッドを定義して、比較可能にしておく。
Enumerable - Rubyリファレンスマニュアル には、便利なメソッドがいくつも定義されている。これを適当に分類する。
- 要素取得
- select , find , grep , reject
- max , max_by , min , min_by
- select , find , grep , reject
- 関数の適用
- map
- inject
- ソート
- sort , sort_by ,
- 存否確認
- all? , any? , include?
- 走査
- each_with_index
- その他
- to_a , partition , zip
2. Python の組み込み関数で、iterable を引数に取る関数を分類する
上記の Ruby の Enumerable モジュールに相当するものは、 Python ではどこに定義されているのだろう?
組み込み関数 (2.1 Built-in Functions) を見ると、 iterable を引数として取るものがある。
iterable とは、enumerate() の説明の中に、
iterable はシーケンス型、イテレータ型、あるいは反復をサポートする他のオブジェクト型でなければなりません。
- 要素取得
- filter
- max , min
- filter
- 関数の適用
- map
- reduce
- sum
- ソート
- sorted
- 存否確認
- all , any
- 走査
- enumerate
- データ構造
- list , set ,frozenset, tuple
- その他
- zip
map と filter を合わせたものが、リスト内包表記 [x for x in S if 条件式] 。
シーケンス型 における x in S , x not in S という書き方もある。
0コメント:
コメントを投稿