これは、しばらくの間私を悩ませてきたものです。Python を学ぶ前に Haskell を学んだので、多くの計算をリストへのマッピングとして考えるのが好きでした。これは、リスト内包表記によって美しく表現されています (ここでは Pythonic バージョンを示しています)。
result = [ f(x) for x in list ]
ただし、多くの場合、x に対して複数のステートメントを実行する必要があります。たとえば、次のようにします。
result = [ f(g(h(x))) for x in list ]
これはすぐに不格好になり、読みにくくなります。
これに対する私の通常の解決策は、これを for ループに戻すことです。
result = []
for x in list:
x0 = h(x)
x1 = g(x0)
x2 = f(x1)
result.append(x2)
これについて私を悩ませていることの1つは、空のリスト「結果」を初期化する必要があることです。それは些細なことですが、私を不幸にします。代替の同等の形式があるかどうか疑問に思っていました。1 つの方法は、ローカル関数を使用することです (それは Python で呼び出されているものですか?)
def operation(x):
x0 = h(x)
x1 = g(x0)
x2 = f(x1)
return x2
result = [ operation(x) for x in list ]
上記の 2 つの形式のいずれかに特定の利点/欠点はありますか? それとももっとエレガントな方法がありますか?