リストアイテムを引数とともに関数にマップする方法はありますか?
私はリストを持っています:
pages = [p1, p2, p3, p4, p5...]
myFunc
そして、以下を計算できるように、追加の引数とともに各リスト要素に対応する関数を呼び出す必要があります
myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)
等々...
これを行うためのエレガントな方法はありますか?
リストアイテムを引数とともに関数にマップする方法はありますか?
私はリストを持っています:
pages = [p1, p2, p3, p4, p5...]
myFunc
そして、以下を計算できるように、追加の引数とともに各リスト要素に対応する関数を呼び出す必要があります
myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)
等々...
これを行うためのエレガントな方法はありますか?
ラムダ関数を使用することもできます。
map(lambda p: myFunc(p, additionalArgument), pages)
リスト内包表記を使用します。
result = [myFunc(p, additionalArgument) for p in pages]
リスト内包表記を使用できます
[myFunc(p, additionalArgument) for p in pages]
またfunctools.partial()
map(functools.partial(myFunc, some_arg=additionalArgument), pages)
分散計算map
に使用することを計画している場合(つまり、マルチプロセッシングを使用している場合)、期待どおりに引数が解凍されないことに注意してください。呼び出しを(2つの引数を受け入れる:と)に分散したいとします。myFunc
page
additionalArgument
pages = [p1, p2, p3, p4, p5...]
args
(タプル)のリストを指定した場合、つまり
args = [(page, additionalArgument) for page in pages]
map
タプルを解凍せずargs
、 1つの引数(タプル)のみをmyFunc
:に渡します。
pool.map(myFunc, args) # map does not unpack the tuple
代わりにmultiprocessing.starmapを使用する必要があります
starmap
map()
iterableの要素が、引数としてアンパックされるiterableであることが期待されることを除いては似ています。
すなわち
pool.starmap(myFunc, args) # tuples are unpacked and two arguments are passed to myFunc