2

これが私が持っているものです:

import csv

a=8   
print a    
mylist = [a,'2','3']    
myfile = open("myfile.csv", "wb") # csv files should always be opened in binary mode 
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)    
wr.writerow(mylist)    
a = a + 1    
print a    
wr.writerow(mylist)

プリントの結果は、私が期待するとおり8、とです。9作成したファイルを開くと、次の結果が得られます。

"8","2","3"     
"8","2","3"

一番上の行は私が期待するものですが、2番目の行はで"8"はなくで始まり"9"ます。変数を再定義した後でもう一度挿入することでこれを回避できることは理解mylist = [a,'2','3']していますが、リスト行を再挿入する必要がある理由、または変数がリストで自動的に更新されない理由を誰かに説明してもらえますか?変数を更新するたびにリスト行を再挿入する必要をなくすために使用できる別のアプローチはありますか?

4

2 に答える 2

2

それは次の行です。

a = a + 1

a以前の値に接続されていない新しい整数に再割り当てしました。

とにかく、整数は不変の変数であり、再割り当て以外のことはできません。

@ thg435がコメントしているように、リスト操作some_list = some_list + [5]も同じ効果があります。ただし、リストは変更可能なオブジェクトであり、を使用できますsome_list.append(5)。これにより、リストが変更され、その変更がcsvファイルに反映されます。

可変オブジェクト(list、dict)を操作する場合は、それらの値を変更できます。

import csv
a=8   
mylist = [a,'2','3']    
with open("myfile.csv", "wb") as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)    
    wr.writerow(mylist)    
    mylist[0] = mylist[0] + 1  ####  here you modify a list
    wr.writerow(mylist)
于 2012-10-11T08:10:27.790 に答える
0

検討

a = 1
mylist = [a,2,3]
print mylist # [1,2,3]

mylistaは3つの要素を持つ構造であり、最初の要素は値を持つ変数を指します1

----------       -------------
| mylist | --->  |   |  2|  3|
----------       -------------
                   |
                   v   
                 -----      -----
                 | a | ---> | 1 |
                 -----      -----

では、変更しましょうa

   a = a + 1
   print mylist # still [1,2,3]

新しい変数を作成して名前を付けaたため、最初の変数からその名前が取り消されました。リストの最初の要素は、まだ最初の(現在は名前のない)変数を指しています。これらの2つの変数は、まったく関連していません。

----------       -------------
| mylist | --->  |   |  2|  3|
----------       -------------
                   |
                   v   
                 -----      -----
                 | ? | ---> | 1 |
                 -----      -----

-----      -----
| a | ---> | 2 |
-----      -----
于 2012-10-11T08:24:20.553 に答える