2009-03-09 7 views
4

Pythonでコレクションに対して操作を実行し、結果を収集する方法は?そのような結果Pythonでコレクションに対して操作を実行し、結果を収集する方法は?

Operation (originalElement, anotherVar) # returns new number. 

をして収集:

結果を=別のリストだから私は、100の番号のリストを持っている、と私はそれらのそれぞれのために、このような機能を実行したい場合は

...

どうすればよいですか?多分ラムダを使用していますか? Pythonで

答えて

12

List comprehensions.は、彼らは次のようになり:

F(x)は、いくつかの関数であり、バーはシーケンスである
a = [f(x) for x in bar] 

あなたのような構築物で部分的に適用される関数としてF(X)を定義することができます。

def foo(x): 
    return lambda f: f*x 

xでパラメータを乗算機能を返しますどの。私はしかし、かなり難解なケースではコンストラクトのこの種を使用して想像していませんが

>>> def foo (x): 
...  return lambda f: f*x 
... 
>>> a=[1,2,3] 
>>> fn_foo = foo(5) 
>>> [fn_foo (y) for y in a] 
[5, 10, 15] 

:リスト内包に用いた構築物のこのタイプの簡単な例は次のようになります。 Pythonは真の関数型言語ではないので、高水準関数を使って巧妙なやり方をするのは、(例えば)Haskellよりも少ない。あなたはこのタイプの構造のためのアプリケーションを見つけるかもしれませんが、実際にその pythonicではありません。

>>> y=5 
>>> a=[1,2,3] 
>>> [x*y for x in a] 
[5, 10, 15] 
+1

foo(x、anotherVar)? –

+0

ありがとう、これはかなり良い構文です。 –

+0

Mykola:あなたが望むものによって、私はy = 4と言うでしょう。 a = [f(x、y)for x in bar]またはa = [f(x、y)for x、y in zip(bar、baz)]。 izipも参照してください。 –

1

これを行う別の(幾分減価)方法がある:

DEFケビン(V): リターンのV *のV

ヴァルス=範囲(0,100)

マップ(ケビン、ヴァルス)

+0

IIRCのようにsquares = [x * x for x]リスト内包のラッパーとして実装されています。 – ConcernedOfTunbridgeWells

関連する問題