Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 似乎append()添加了变量,而不是它们的值_Python_Python 2.7_Append - Fatal编程技术网

Python 似乎append()添加了变量,而不是它们的值

Python 似乎append()添加了变量,而不是它们的值,python,python-2.7,append,Python,Python 2.7,Append,我正在读取一个具有“缺失”索引值的CSV文件(例如,1、2、4——缺失第三个索引)。我想用虚线填充空格,虚线有索引,其他变量为零。这是填充空格的代码(打印功能用于检查): 打印输出按预期显示行。但是在csv_raw中,第一列(索引)中的所有值都等于i的最后一个值,而不是调用append函数时的i。以下是输出: 打印虚拟行: [3,0,0][4,0,0][6,0,0][7,0,0][8,0,0][9,0,0] 打印csv_raw(在程序结束时): [1,1,1'],[2,2,2'],[9,0,0]

我正在读取一个具有“缺失”索引值的CSV文件(例如,1、2、4——缺失第三个索引)。我想用虚线填充空格,虚线有索引,其他变量为零。这是填充空格的代码(打印功能用于检查):

打印输出按预期显示行。但是在csv_raw中,第一列(索引)中的所有值都等于i的最后一个值,而不是调用append函数时的i。以下是输出:

打印虚拟行:

[3,0,0][4,0,0][6,0,0][7,0,0][8,0,0][9,0,0]

打印csv_raw(在程序结束时):

[1,1,1'],[2,2,2'],[9,0,0],[9,0,0],[5,3',, “3'],[9,0,0],[9,0,0],[9,0,0],[9,0,0],[10,4,4']

我试图在每次循环后声明它将上升,但它并没有改变结果。我想了解如何解决这个问题以及为什么会发生。我想这与python的工作方式有关(我知道一些基本的C语言,但没有正式的python培训)


谢谢

问题在于,当您使用
csv\u raw.append(dummy\u row)
时,您没有附加
dummy\u row
的副本。这意味着您每次都要添加对完全相同对象的引用,
dummy\u row
更改时,
csv\u raw
中的相应条目也会更改,因为它们都是相同的

您需要的是将
dummy_row
的副本附加到
csv_raw
。尝试以下操作:
csv\u raw.append(列表(虚拟行))

将代码更改为

csv_raw.append(dummy_row[:])
dummy_row
的完整切片(生成浅拷贝)附加到
csv_raw
。目前,您只需将对同一列表的引用放入列表
csv\u raw

演示正在发生的事情:

>>> master = []
>>> a = [1,2,3]
>>> master.append(a)
>>> master.append(a)
>>> master
[[1, 2, 3], [1, 2, 3]]
>>> a[1] = 42
>>> master
[[1, 42, 3], [1, 42, 3]]
master
包含对
a
的两个引用,因此更改
a
后,显示
master
的输出也将更改

>>> master.append(a[:]) # append a COPY of a
>>> master
[[1, 42, 3], [1, 42, 3], [1, 42, 3]]
>>> a[1] = 100
>>> master
[[1, 100, 3], [1, 100, 3], [1, 42, 3]]
现在,
master[0]
master[1]
包含对同一对象的引用,该对象与
master[2]
不同

>>> id(master[0])
41583032
>>> id(master[1])
41583032
>>> id(master[2])
41713816

哇!谢谢你的快速回答。它现在起作用了。很好地一场接一场地描述了在这种情况下发生的事情。
>>> id(master[0])
41583032
>>> id(master[1])
41583032
>>> id(master[2])
41713816