2011-11-18 153 views
28

Tôi muốn biết cách khai báo mảng hai chiều trong Python.Mảng hai chiều trong python

arr = [[]] 

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

Hai bài tập đầu tiên hoạt động tốt. Nhưng khi tôi cố gắng làm, arr [1] .append ("bb1"), tôi nhận được lỗi sau,

IndexError: danh sách danh sách nằm ngoài phạm vi.

Tôi có làm bất cứ điều gì ngớ ngẩn trong cố gắng để khai báo mảng 2-D

[sửa]: nhưng tôi không biết không. của các phần tử trong mảng (cả hàng và cột).

Trả lời

48

Bạn không "khai báo" mảng hoặc bất kỳ thứ gì khác trong python. Bạn chỉ cần gán cho một biến (mới). Nếu bạn muốn một mảng đa chiều, chỉ cần thêm mảng mới làm phần tử mảng.

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

hoặc

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

nên không này được 'arr.append (...)' thay vì của 'arr [0] = ...', để tránh 'IndexError: chỉ mục gán danh sách ngoài phạm vi'? – Bruno

+1

vâng, đã sửa nó. – ThiefMaster

48

Không có mảng đa chiều như vậy trong Python, những gì bạn có là một danh sách có chứa danh sách khác.

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

Điều bạn đã làm là khai báo danh sách chứa một danh sách duy nhất. Vì vậy, arr[0] chứa danh sách nhưng arr[1] không được xác định.

Bạn có thể định nghĩa một danh sách có chứa hai danh sách như sau:

arr = [[],[]] 

Hoặc để xác định một danh sách dài bạn có thể sử dụng:

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

gì bạn không nên làm điều này là:

arr = [[]] * 3 

Vì điều này đặt cùng một danh sách trong tất cả ba nơi trong danh sách container:

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

Dấu gạch dưới trong danh sách hiểu là gì? –

+1

@ root45 Chúng ta cần một biến trong danh sách hiểu để chúng ta có thể đặt 'arr = [[] cho i trong phạm vi (5)]' nhưng có một quy ước để đặt tên biến mà bạn sẽ không bao giờ sử dụng như '_' . Mặc dù trong Python REPL tương tác, biến '_' lưu kết quả của biểu thức cuối cùng. –

3

Bạn cố gắng thêm để Yếu tố thứ hai trong mảng, nhưng nó không tồn tại. Tạo.

arr = [[]] 

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

Những gì bạn đang sử dụng ở đây không phải là mảng, nhưng danh sách (danh sách).

Nếu bạn muốn mảng đa chiều trong Python, bạn có thể sử dụng mảng Numpy. Bạn cần phải biết hình dạng trước.

Ví dụ:

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

Khi xây dựng danh sách đa chiều bằng Python Tôi thường sử dụng một cái gì đó tương tự như giải pháp ThiefMaster, nhưng thay vì phụ thêm các mục vào chỉ số 0, sau đó gắn thêm các mục vào chỉ số 1, v.v., Tôi luôn sử dụng chỉ mục -1, đây là chỉ mục của mục cuối cùng trong mảng.

ví dụ:

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") 

sẽ sản xuất 2D-mảng (thực sự là một danh sách liệt kê) bạn đang sau.

2

Chúng ta có thể tạo ra mảng đa chiều động như sau,

Tạo 2 biến để đọc x và y từ đầu vào tiêu chuẩn:

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

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

Tạo một mảng các danh sách với giá trị ban đầu điền với 0 hoặc bất cứ điều gì bằng mã sau đây

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

tạo số hàng và cột cho dữ liệu mảng của bạn.

đọc dữ liệu từ đầu vào tiêu chuẩn:

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

hiển thị các kết quả:

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

hoặc sử dụng một cách khác để hiển thị mảng trên động tạo ra là,

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

Đối với lập trình compititve

1) Đối với đầu vào giá trị trong một 2D-Array

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

2) Để hiển thị mảng 2D

for i in range(0,row): 
    for j in range(0,len(main_list[0]): 
     print main_list[i][j], 
     print 
Các vấn đề liên quan