なぜこれら2つのコードスニペットが異なる結果を生成するのですか?リストの理解は、割り当てられた変数を変更するのではなく、新しいリストを作成すると仮定します。第二の試みにおいてリストを動的に変更するとリストの理解が機能しない
import numpy as np
x = np.array([1, 1, 1, 1])
x = [2 + x[0:i] .dot(y[0:i]) for i in range(0, len(x))]
print(x) # returns [2, 3, 5, 8]
x = np.array([1, 1, 1, 1])
for i in range(0, len(x)):
x[i] = 2 + x[0:i] .dot(y[0:i])
print(x) # returns [2, 4, 12, 48]
はい、リスト内包表記によって新しいリストが作成されます。なぜあなたはそれが破壊的であると思いますか?返されるリストは、numpy配列ではなく通常のpythonリストになります。 –
変数への代入*は決してオブジェクト*を変更しません。あなたはまだ答えがあるようです...あなたがなぜ質問を投稿したのか分かりません... –