6

変数の中間値を Python に格納したいと考えています。この変数はループで更新されます。コマンドでこれを実行しようとするとlist.append、リスト内のすべての値が変数の新しい値で更新されます。どうすればいいですか?

while (step < maxstep):
    for i in range(100):    
        x = a*b*c
        f1 += x
    f2.append(f1)
    print f2
    raw_input('<<')
    step += 1

期待される出力

[array([-2.03,-4.13])]
<<
[array([-2.03,-4.13]),array([-3.14,-5.34])]

印刷出力

[array([-2.03,-4.13])]
<<
[array([-3.14,-5.34]),array([-3.14,-5.34])]

Pythonで必要なものを取得する別の方法はありますか?

4

5 に答える 5

8

オリジナルにタイプミスf1があり、実際にはfi(またはその逆)であると仮定します。

fifi += xはオブジェクトへのポインターであるため、実際にオブジェクトの値を変更するときに、同じポインターを追加し続けますfi。これが明確であることを願っています。

問題を解決するには、代わりにできfi = fi + xます。

于 2012-09-05T10:48:02.910 に答える
3

次のような意味だったと思います。

   f2 = []
   f1 = 0
   for i in range(100):    
       x = f()
       f1 += x
   f2.append(f1)
   print f2

f1が変更可能なオブジェクトである場合、行f1 += xは新しいオブジェクトを作成せず、 の値のみを変更することに注意してください。f1そのため、配列内のすべてのオカレンスf2が更新されます。

于 2012-09-05T10:50:22.923 に答える
2

同じ配列をリストに追加してから、配列の内容を変更しているようです

追加するたびに新しい配列オブジェクトを作成する必要がありますf2

さらにヘルプが必要な場合は、質問のコードにさらに情報を追加する必要があります。現時点ではあまり意味がありません (fi変更された値はどこですか?)

于 2012-09-05T10:47:59.037 に答える
1

実例を実際に貼り付ける必要があります。

追加するオブジェクト(fi)は変更可能です(Pythonのドキュメントを参照)。つまり、オブジェクトの値ではなく、オブジェクトへの参照を追加するということです。したがって、リストインデックス0と1はどちらも実際には同じオブジェクトです。

fi = array()ループの反復ごとに新しいオブジェクト()を作成するか、コピーモジュールを使用する必要があります。

于 2012-09-05T10:54:54.553 に答える
1

関連するもう 1 つの質問は、「変数を参照渡しするにはどうすればよいですか?」です。Daren Thomas は代入を使用して、Python で変数パスがどのように機能するかを説明しました。append メソッドについても、同様に考えることができます。リスト「list_of_values」をリスト「list_of_variables」に追加するとします。

list_of_variables = []
list_of_values = [1, 2, 3]
list_of_variables.append(list_of_values)
print "List of variables after 1st appending: ", list_of_variables
list_of_values.append(10)
list_of_variables.append(list_of_values)
print "List of variables after 2nd appending: ", list_of_variables

追加操作は次のように考えることができます。

list_of_variables[0] = list_of_values --> [1, 2, 3]
list_of_values --> [1, 2, 3, 10]
list_of_variables[1] = list_of_values --> [1, 2, 3, 10]

「list_of_variables」の 1 番目と 2 番目の項目がメモリ内の同じオブジェクトを指しているため、上記の出力は次のようになります。

List of variabiles after 1st appending:  [[1, 2, 3]]
List of variables after 2nd appending:  [[1, 2, 3, 10], [1, 2, 3, 10]]

一方、「list_of_values」が変数の場合、動作は異なります。

list_of_variables = []
variable = 3
list_of_variables.append(variable)
print "List of variabiles after 1st appending: ", list_of_variables
variable = 10
list_of_variables.append(variable)
print "List of variables after 2nd appending: ", list_of_variables

追加操作は次と同等になりました。

list_of_variables[0] = variable --> 3
variable --> 4
list_of_variables[1] = variable --> 4

出力は次のとおりです。

List of variabiles after 1st appending:  [3]
List of variables after 2nd appending:  [3, 10]

variable と list_of_values の違いは、後者がインプレースで変更されることです。

于 2016-10-09T14:21:07.367 に答える