イテラブルに対し関数で変換処理をおこなった結果をジェネレートして返すイテレータ生成関数です。変換関数には複数の引数を渡すことができます。
starmap関数とは
複数の引数を持つ関数の出力結果を生成するイテレータ生成関数です。以下のように複数の引数を持つ関数に渡す変数をイテラブルで渡します(イテラブルだと複数個渡すことができます)。さらにそれを複数回渡すためイテラブルの中にイテラブルが入っている構造になります。
出力結果は第1引数で指定した変換関数の戻り値のイテレータになります。
上記の例ではリストを使っていますが、イテラブルであればタプルでも何でもかまいません。
starmap関数の実装サンプル
実際にサンプルをみてゆきます。以下のサンプルでは変換関数fに対しx,y,zの3つの引数が必要です。そのためlの各要素に[1,2,3],…など長さ3のリストを用意しその要素をさらにリストにしてstamap関数の第2引数に渡しています。
from itertools import starmap
def f(x,y,z):
return x*y*z
l=[[1,2,3],[4,5,6],[7,8,9]]
ans=[i for i in starmap(f ,l)]
print(ans)
実行結果
[6, 120, 504]
最初の要素は[1,2,3]でしたのでf(1,2,3)=1*2*3が実行され、結果の6になります。2番目の[4,5,6]が引き渡されf(4,5,6)=4*5*6=120、3番目は[7,8.9]が引き渡されf(7,8,9)=7*8*9=504となります。
外側も内側の要素もイテラブルであれば何でも構いません。関数が許せば引数の数も可変にできます。関数に渡す引数がイテラブルであれば要素にリストやタプルが混在していても問題ありません。
from itertools import starmap
def f(x=1,y=1,z=1):
return x*y*z
l=((2,1),[3,4],(4,))
ans=[i for i in starmap(f ,l)]
print(ans)
実行結果
[2, 12, 4]
まとめ
starmap関数は変換関数の変数に数にとらわれず変換することができるため便利な関数です。使いどころは多いとおもいますので積極的に活用してゆきましょう。
Comment on this article
コメントはまだありません。
Send comments