59

リストアイテムを引数とともに関数にマップする方法はありますか?

私はリストを持っています:

pages = [p1, p2, p3, p4, p5...]

myFuncそして、以下を計算できるように、追加の引数とともに各リスト要素に対応する関数を呼び出す必要があります

myFunc(p1, additionalArgument)
myFunc(p2, additionalArgument)

等々...

これを行うためのエレガントな方法はありますか?

4

4 に答える 4

114

ラムダ関数を使用することもできます。

map(lambda p: myFunc(p, additionalArgument), pages)
于 2015-08-13T18:17:30.443 に答える
76

リスト内包表記を使用します。

result = [myFunc(p, additionalArgument) for p in pages]
于 2012-04-18T15:16:19.577 に答える
48

リスト内包表記を使用できます

[myFunc(p, additionalArgument) for p in pages]

またfunctools.partial()

map(functools.partial(myFunc, some_arg=additionalArgument), pages)
于 2012-04-18T15:16:34.413 に答える
3

分散計算mapに使用することを計画している場合(つまり、マルチプロセッシングを使用している場合)、期待どおりに引数が解凍されないことに注意してください。呼び出しを(2つの引数を受け入れる:と)に分散したいとします。myFuncpageadditionalArgument

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を使用する必要があります

starmapmap()iterableの要素が、引数としてアンパックされるiterableであることが期待されることを除いては似ています。

すなわち

pool.starmap(myFunc, args)  # tuples are unpacked and two arguments are passed to myFunc
于 2019-12-02T14:29:36.223 に答える