2017-06-27 91 views
0

我基本上是試圖切換數組數組;我的初步數據是:Python不會追加到for循環的列表

array = [ 
    [0,0,0], 
    [1,1,1] 
    ] 

輸出應該是:

[ 
    [0,1], 
    [0,1], 
    [0,1] 
    ] 

但是我得到的是:

[] 

我已經嘗試做無迴路同樣的事情,但是當我向他們介紹它只是不會追加!

看到代碼在這裏:

array = [ 
    [0,0,0], 
    [1,1,1] 
    ] 
transformedArray = [] 
#add rows to transformed 
for j in range(0, len(array) - 1): 
    transformedArray.append([]) 
#for each row 
for i in range(0, len(array[0]) - 1): 
    #for each column 
    for k in range(0, len(array) - 1): 
     transformedArray[i].append(array[k][i]) 

你能幫忙嗎?我還沒有在網上發現任何類似的問題,所以我猜我已經錯過了一些愚蠢的東西!

+1

擡起頭,當你做'範圍(0,LEN(數組[0]) - 1)'你不會遍歷每一行,因爲'range'停止參數是* exclusive *。不過,就我看來,無論如何,你會得到索引錯誤,因爲你在混淆「行」和「列」。 –

+0

此外,執行* transpose *操作的慣用方式如下:'list(zip(* array))'。只要我是nitpicky,你正在與*列表*不*數組* *。 –

+0

@ juanpa.arrivillaga我想了一下,我一直在看它,所以現在一切都混合在我的腦海中! – nickthefreak

回答

1

嘗試嵌套的循環:

array = [ 
    [0,0,0], 
    [1,1,1] 
    ] 
transformedArray = [[0,0],[0,0],[0,0]] 

# iterate through rows 
for i in range(len(array)): 
    # iterate through columns 
    for j in range(len(array[0])): 
     transformedArray[j][i] = array[i][j] 

for res in transformedArray: 
    print(res) 

回報:

[0, 1] 
[0, 1] 
[0, 1] 

編輯補充解釋

首先,列表被定義爲在上面這段代碼:aList = [ ... ]其中一個數組將被定義爲anArray = numpy.array([...]),所以就上述評論來說,這是列表中處理的問題,不是真正的python數組進程。接下來,通過索引將元素添加到列表中,所以必須有一個放置它們的地方。我通過創建一個包含3個元素的列表來處理這個列表。原始文章只會創建前2行,然後在創建第3行時發生索引失敗。嵌套for循環然後遍歷嵌入列表。

+0

我認爲應該明確說明你在這裏修正的錯誤,即將'stop'參數與'range'一起錯誤的錯誤。順便說一句,在Python中進行轉置的習慣方式是list(zip(* array))'。 –

+0

當然。首先,list被定義爲上面的代碼:'''aList = [']''''''''''''''''''''在這裏數組被定義爲'''anArray = array([...])'''上面的註釋點,這是列表處理中的問題,而不是真正的python數組進程。接下來,通過索引將元素添加到列表中,所以必須有一個放置它們的地方。我通過創建一個包含3個元素的列表來處理這個列表。原始文章只會創建前2行,然後在創建第3行時發生索引失敗。嵌套for循環然後遍歷嵌入列表。 –

+0

我的意思是在這個問題本身:)我冒昧地將此添加到您的答案。如果您願意,您可以編輯/刪除它。 –

0

你可以通過在所有陣列映射索引的訪問操作的序列做:

for i in range(len(array[0])): 
    transformedArray.append(map(lambda x: x[i], array))