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)

正如我所期望的那样,打印的结果是8and 。9当我打开我创建的文件时,我得到了结果:

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

第一行是我所期望的,但第二行以"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]

mylist是一个具有三个元素的结构,第一个元素指向a具有值的变量1

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

现在让我们改变a

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

我们创建了一个变量并将其命名为a,因此从第一个变量中撤消了该名称。列表的第一个元素仍然指向第一个(现在未命名的)变量。这两个变量没有任何关系。

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

-----      -----
| a | ---> | 2 |
-----      -----
于 2012-10-11T08:24:20.553 回答