2016-06-30 9 views
0
map(Fn, Iterable)については

、私のFn()がfllowingされています。私はmap()Fn()を使用する場合、コードはこれが好きではありませんでしたPythonマップ(Fn、Iterable)を使用しているときにFnで複数のパラメータを渡すにはどうすればいいですか?</p> <pre><code>map(Fn(Iterable, k), Iterable) </code></pre> <p>それはどのように私ができることを意味します

def Fn(x, k): 
    return x+k 

をしかし、パラメータkを使用したいのですか? THX!

ここ
+1

おそらく、あなたはむしろあなたはそれが行われるべきだと思うかよりも、あなたの実際のタスクを記述する必要があります。 –

答えて

0

は、いくつかの可能性

def fn(x,k): 
    return x+k 

In [1095]: k=10 # in global space 

In [1096]: map(lambda x: fn(x,k), [1,2,3]) 
Out[1096]: <map at 0xb263e04c> # ops, py3, need 

In [1097]: list(map(lambda x: fn(x,k), [1,2,3])) 
Out[1097]: [11, 12, 13] 

私はマップするために、リストの内包表記を好む、次のとおりです。

In [1100]: [(lambda x: fn(x,k))(x) for x in [1,2,3]] 
Out[1100]: [11, 12, 13] 

In [1101]: [fn(x,k) for x in [1,2,3]] 
Out[1101]: [11, 12, 13] 

または両方xとkは反復可能オブジェクトから来る場合は、我々はジップでそれらに参加することができます。

In [1102]: [fn(x,k) for x,k in zip([1,2,3],[10,20,30])] 
Out[1102]: [11, 22, 33] 

私はfunctools.partialを提案しようとしていましたが、私は2番目のpos itionalな議論。第1引数を部分的に定義するために使用することができます(この場合は関係ありません)。

In [1107]: from functools import partial 

In [1111]: [partial(fn, 1)(k) for k in [10,20,30]] 
Out[1111]: [11, 21, 31] 

In [1112]: list(map(partial(fn, 1),[10,20,30])) 
Out[1112]: [11, 21, 31] 

私はfnを変更した場合ので、kはキーワード引数mapため

def fn(x,k=0): 
    return x+k 

In [1114]: [partial(fn, k=10)(x) for x in [1,2,3]] 
Out[1114]: [11, 12, 13] 

と同様になります。私はfnを定義する場合

ので、タプルを取り、私はマップとジッパーを使用することができます。

def fn(args): 
    x,k=args 
    return x+k 

In [1117]: list(map(fn,zip([1,2,3],[10,20,30]))) 
Out[1117]: [11, 22, 33] 
+0

'fn()'が実際に与えられている場合、引数の順序は関係ありません... 'functools.partial()'は後で適用されるかもしれません。 – zondo

+0

はい、それはもう少し実験を重ねると実現しました。 – hpaulj

+0

そのキーワード解決策は実際にはかなり良いです。ただし、 'fn()'の定義を変更する必要はありません。 – zondo

関連する問題