2011-11-18 112 views
28

我想知道如何在Python中聲明二維數組。python中的二維數組

arr = [[]] 

arr[0].append("aa1") 
arr[0].append("aa2") 
arr[1].append("bb1") 
arr[1].append("bb2") 
arr[1].append("bb3") 

前兩個分配工作正常。但是當我嘗試做,arr [1] .append(「bb1」),我得到以下錯誤,

IndexError:列表索引超出範圍。

我在做什麼,試圖申報2-d陣列

[編輯]傻: ,但我不知道沒有了。數組中的元素(行和列)。

回答

48

你不要在python中「聲明」數組或其他任何東西。您只需指定一個(新)變量。如果你想要一個多維數組,只需添加一個新的數組作爲數組元素。

arr = [] 
arr.append([]) 
arr[0].append('aa1') 
arr[0].append('aa2') 

arr = [] 
arr.append(['aa1', 'aa2']) 
+3

不應該這是'arr.append(...)'代替'arr [0] = ...',以避免'IndexError:列表分配索引超出範圍'? – Bruno

+1

是的,修復它。 – ThiefMaster

48

有沒有多維數組這樣在Python中,你有什麼是包含其他列表清單。

>>> arr = [[]] 
>>> len(arr) 
1 

你所做的是聲明一個包含單個列表的列表。所以arr[0]包含一個列表,但沒有定義arr[1]

您可以如下定義包含兩個列表列表:

arr = [[],[]] 

或定義,你可以使用更長的名單:

>>> arr = [[] for _ in range(5)] 
>>> arr 
[[], [], [], [], []] 

什麼你應該做的是這樣的:

arr = [[]] * 3 

由於這樣放入相同的列表在容器列表中的所有三個地方:

>>> arr[0].append('test') 
>>> arr 
[['test'], ['test'], ['test']] 
+1

列表理解中的下劃線是幹什麼的? –

+1

@ root45我們需要列表理解中的一個變量,所以我們可以把'arr = [[] for i in range(5)]''但是有一個約定來命名一個你永遠不會用作'_'的變量。儘管在交互式Python REPL中'_'變量存儲了最後一個表達式的結果。 –

3

您嘗試添加到陣列中的第二個元素,但它不存在。 創建它。

arr = [[]] 

arr[0].append("aa1") 
arr[0].append("aa2") 
arr.append([]) 
arr[1].append("bb1") 
arr[1].append("bb2") 
arr[1].append("bb3") 
14

你在這裏使用的不是數組,而是列表(列表)。

如果你想在Python中使用多維數組,你可以使用Numpy數組。你需要事先知道形狀。

例如:

import numpy as np 
arr = np.empty((3, 2), dtype=object) 
arr[0, 1] = 'abc' 
2

當構建在Python多維名單我通常使用類似ThiefMaster的解決方案的東西,而不是追加項目索引0,然後追加項目索引1,等等,我總是使用索引-1,它自動是數組中最後一項的索引。

arr = [] 

arr.append([]) 
arr[-1].append("aa1") 
arr[-1].append("aa2") 

arr.append([]) 
arr[-1].append("bb1") 
arr[-1].append("bb2") 
arr[-1].append("bb3") 

會產生二維陣列(實際上是一個名單列表)你之後。

2

我們可以動態地創建多維數組如下,

創建2個變量,以讀取來自標準輸入的x和y:

print("Enter the value of x: ") 
x=int(input()) 

print("Enter the value of y: ") 
y=int(input()) 

創建列表的使用填充有0或任何初始值的數組以下代碼

z=[[0 for row in range(0,x)] for col in range(0,y)] 

爲您的陣列數據創建行數和列數。從標準輸入

讀數據:

for i in range(x): 
     for j in range(y): 
      z[i][j]=input() 

顯示結果:

for i in range(x): 
     for j in range(y): 
      print(z[i][j],end=' ') 
     print("\n") 

或用另一種方式來顯示上述動態創建的陣列,

for row in z: 
    print(row) 
0
x=3#rows 
y=3#columns 
a=[]#create an empty list first 
for i in range(x): 
    a.append([0]*y)#And again append empty lists to original list 
    for j in range(y): 
     a[i][j]=input("Enter the value") 
0

編程爲

1)對於輸入在2D-陣列

row=input() 
main_list=[] 
for i in range(0,row): 
    temp_list=map(int,raw_input().split(" ")) 
    main_list.append(temp_list) 

2)的值對於顯示2D陣列

for i in range(0,row): 
    for j in range(0,len(main_list[0]): 
     print main_list[i][j], 
     print