2014-07-10 59 views
1

我正在讀取具有「missing」索引值(例如,1,2,4--缺少第三個索引)的CSV文件。我想用虛線填充空格,其索引和其他變量爲零。這是,在坯料填充碼(打印功能是用於檢查):看起來像append()添加變量而不是它們的值

for i in range(int(row[0]) - id_last - 1): 
    dummy_row[0] = i 
    print dummy_row 
    csv_raw.append(dummy_row) 

打印輸出顯示的行如預期。但是在csv_raw中,第一列(索引)中的所有值都等於i的最後一個值,而不是我在調用append函數的那一刻的值。下面是輸出:

打印dummy_row:

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

打印csv_raw(在程序結束時):

[[1, '第一', '1'],[2,' ,[9,0,0],[9,0,0],[5','3', '3'],[9,0,0],[9,0,0] 0],[9,0,0],[9,0,0],[10,'4th','4']]

我試圖聲明,每個循環後,但它並沒有改變結果。我想了解如何解決問題以及爲何發生這種情況。我想這與python的工作方式有關(我知道一些基本的C,但沒有正式的python培訓)。

謝謝!

回答

1

問題是,當您使用csv_raw.append(dummy_row)時,您沒有附加dummy_row的副本。這意味着每次添加對同一個對象的引用 - 每當dummy_row發生更改時,csv_raw中的相應條目也會發生更改,因爲它們都是相同的。

你想要的是將dummy_row的副本附加到csv_raw。試試這個:csv_raw.append(list(dummy_row))

+0

哇!感謝您的超快速答案。它現在有效。 –

2

更改您的代碼

csv_raw.append(dummy_row[:]) 

追加一個全切片(產生淺拷貝)的dummy_rowcsv_raw。目前,您只需將相同的列表添加到列表csv_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 
+0

在這種情況下發生的事情很棒。 – TheSoundDefense

相關問題