Island Babies

いろんなことを書きます

初めまして itertools。

概要

二つのイテレータから全部の組み合わせ方を返してくれるような組み込み関数ってあったりしないのかなーとか調べてみたら itertools.product っていうデカルト積を返してくれる関数を発見しました. それ以外にもイテレータを扱う上で便利そうな関数がいくつかあったので少しまとめてみます。基本的には公式を参考にしています.

accumulate

累積和であったり、ある二項演算を初めから順に適用させた累積の要素を返すようなイテレータを返します。

# accumulate([1,2,3,4,5]) --> 1 3 6 10 15
# accumulate([1,2,3,4,5], initial=100) --> 100 101 103 106 110 115
# accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120

これだけでめちゃ便利そうな感じがしますね。initialで指定すれば初期値を設定できて, 第二引数として二項演算を指定することができます!
累積和は特に使うことがよくあると思うので便利そう。

chain

複数のイテレータを受け取って、最初のイテレータを要素を順番に返し、その次に2番目のイテレータの要素を・・・というように順番に要素を返してくれる、イテレータを繋げるような関数です.

# chain('ABC', 'DEF') --> A B C D E F

使い道はありそうだけど、あんまり使うことはないのかなーって感じはしますね笑

combinations

イテレータの各要素の、引数で与えた長さの組み合わせの全パターンを返します。

# combinations('ABCD', 2) --> AB AC AD BC BD CD
# combinations(range(4), 3) --> 012 013 023 123

オシャレだけどあんま使うことはなさそう.

dropwhile

述語として渡した関数の値が真の間の要素を頭から全て捨てていって、偽になった要素から後のものを全て返す関数です。

# dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1

これはばちばち使いやすそうな関数ですね

filterfalse

関数型言語でよくあるfilterとほぼ同じですが、疑になるような要素を返します。