Cách xác định mảng hai chiều trong Python


724

Tôi muốn xác định mảng hai chiều mà không có độ dài khởi tạo như thế này:

Matrix = [][]

Nhưng nó không hoạt động...

Tôi đã thử mã dưới đây, nhưng nó cũng sai:

Matrix = [5][5]

Lỗi:

Traceback ...

IndexError: list index out of range

Lỗi của tôi là gì?


14
Một không định nghĩa mảng , hoặc bất kỳ điều gì khác. Tuy nhiên, bạn có thể tạo các chuỗi đa chiều, như các câu trả lời ở đây hiển thị. Hãy nhớ rằng các biến python được gỡ bỏ, nhưng các giá trị được gõ mạnh.
SingleNegationElimination

1
Tôi bối rối. Đến từ các ngôn ngữ khác: đó là sự khác biệt giữa Mảng 1D chứa Mảng 1D và Mảng 2D. Và AFAIK không có cách nào để có một mảng đa chiều (hoặc danh sách) trong python. Nên nói ở đây ...
Dirk Reichel

1
Xem thêm Câu hỏi thường gặp về Python3 về cách tạo danh sách đa chiều?
Kevin W Matthews

Câu trả lời:


1009

Về mặt kỹ thuật, bạn đang cố gắng lập chỉ mục cho một mảng chưa được khởi tạo. Trước tiên, bạn phải khởi tạo danh sách bên ngoài với danh sách trước khi thêm các mục; Python gọi đây là "danh sách hiểu".

# Creates a list containing 5 lists, each of 8 items, all set to 0
w, h = 8, 5;
Matrix = [[0 for x in range(w)] for y in range(h)] 

Bây giờ bạn có thể thêm các mục vào danh sách:

Matrix[0][0] = 1
Matrix[6][0] = 3 # error! range... 
Matrix[0][6] = 3 # valid

Lưu ý rằng ma trận là "y" địa chỉ chính, nói cách khác, "chỉ mục y" xuất hiện trước "chỉ số x".

print Matrix[0][0] # prints 1
x, y = 0, 6 
print Matrix[x][y] # prints 3; be careful with indexing! 

Mặc dù bạn có thể đặt tên cho chúng theo ý muốn, tôi nhìn vào nó theo cách này để tránh một số nhầm lẫn có thể xảy ra với việc lập chỉ mục, nếu bạn sử dụng "x" cho cả danh sách bên trong và bên ngoài và muốn có Ma trận không vuông.


219
[[0 cho x trong phạm vi (cols_count)] cho x trong phạm vi (rows_count)]
songhir

3
Chỉnh sửa lẻ bởi ademar111190. Trong Python 3 không có xrange nhưng nếu bạn phải sử dụng Python 2 thì xrange là hàm chính xác để sử dụng nếu bạn không muốn tạo các đối tượng một cách không cần thiết.
Dave

4
@dave Nếu bạn không cần nó bằng 0, có thể sử dụng rangeđể tạo danh sách nội bộ trực tiếp:[range(5) for x in range(5)]
alanjds

2
@alanjds - Điều đó đúng, nhưng bạn vẫn có khả năng tạo nhiều tham chiếu đối tượng không cần thiết trong Python 2 cho lần lặp bên ngoài (hãy thử điều này với phạm vi RẤT lớn). Ngoài ra, việc khởi tạo một số giá trị hầu như luôn luôn là những gì bạn muốn - và điều này thường xuyên hơn không 0. phạm vi mang lại một bộ sưu tập lặp lại - xrange trả về một trình tạo. Quan điểm của tôi là ademar "đã sửa" một cái gì đó thực sự nói chung chính xác và hiệu quả hơn so với chỉnh sửa của anh ấy.
Dave

10
@ 6packkid [0] * wphần này là tốt, nhưng [[0] * w] * h]sẽ tạo ra hành vi bất ngờ. Hãy thử mat = [[0] * 3] * 3; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 10, 0], [0, 10, 0]])mat = [[0] * 3 for i in range(3)]; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 0, 0], [0, 0, 0]]).
gửi

407

Nếu bạn thực sự muốn một ma trận, bạn có thể sử dụng tốt hơn numpy. Các phép toán ma trận numpythường sử dụng một kiểu mảng có hai chiều. Có nhiều cách để tạo một mảng mới; một trong những hữu ích nhất là zeroshàm, lấy tham số hình dạng và trả về một mảng của hình đã cho, với các giá trị được khởi tạo về 0:

>>> import numpy
>>> numpy.zeros((5, 5))
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

Dưới đây là một số cách khác để tạo mảng và ma trận 2 chiều (với đầu ra được loại bỏ để thu gọn):

numpy.arange(25).reshape((5, 5))         # create a 1-d range and reshape
numpy.array(range(25)).reshape((5, 5))   # pass a Python range and reshape
numpy.array([5] * 25).reshape((5, 5))    # pass a Python list and reshape
numpy.empty((5, 5))                      # allocate, but don't initialize
numpy.ones((5, 5))                       # initialize with ones

numpycũng cung cấp một matrixloại, nhưng nó không còn được khuyến nghị cho bất kỳ mục đích sử dụng nào và có thể bị xóa khỏi numpytrong tương lai.


79
Bất cứ khi nào bạn muốn ma trận, bạn muốn sử dụng numpy. Câu trả lời này nên là đầu tiên.
Pat B

2
Thực tế là câu hỏi sử dụng từ "ma trận" tiếng Anh không có nghĩa là họ nên sử dụng np.matrixđể thể hiện nó. Cách thích hợp để biểu diễn một ma trận trong numpy là với một array.
user2357112 hỗ trợ Monica

@ user2357112, và như bạn có thể thấy, hầu hết các ví dụ được liệt kê ở trên đầu ra arrays thay vì ma trận. Mặc dù không phải lúc nào cũng được khuyến khích, có những lý do chính đáng để sử dụng matrix- vấn đề bối cảnh.
gửi

1
@senderle, bạn có thể mở rộng lý do để sử dụng matrixkhông? Kể từ khi @nhà điều hành được giới thiệu, dường như có một lý do ít hơn kể từ khi bài viết này được viết.
JPP

1
@jpp, như bài viết đã nói trước đây, những người đến từ matlab có thể thấy nó hữu ích. Nhưng các numpytài liệu hiện chỉ ra rằng lớp học có thể bị phản đối và bị loại bỏ trong tương lai, vì vậy tôi đã đưa nó ra khỏi câu trả lời.
gửi

337

Đây là một ký hiệu ngắn hơn để khởi tạo một danh sách các danh sách:

matrix = [[0]*5 for i in range(5)]

Thật không may, rút ​​ngắn điều này thành một cái gì đó như 5*[5*[0]]không thực sự hoạt động vì bạn kết thúc với 5 bản sao của cùng một danh sách, vì vậy khi bạn sửa đổi một trong số chúng, tất cả đều thay đổi, ví dụ:

>>> matrix = 5*[5*[0]]
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> matrix[4][4] = 2
>>> matrix
[[0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2]]

4
Bạn có thể giải thích logic đằng sau sự thất bại "rút ngắn"? Tại sao python xuất bản sao của cùng một danh sách trong trường hợp này và một mảng các ô khác nhau trong trường hợp [0]*5?
mike622867 22/03/2015

12
Các ý kiến ​​trên không chính xác: [0] * 5 vẫn tạo một chuỗi với 5 lần tham chiếu đến cùng một đối tượng đại diện cho số 0. Nhưng bạn sẽ không bao giờ nhận thấy điều này vì 0 là bất biến (tôi sẽ nói 0 hành xử như một giá trị - hoặc bạn có thể nghĩ về nó như một kiểu dữ liệu nguyên thủy - bởi vì nó là bất biến nên bạn không bao giờ gặp vấn đề với các tham chiếu đến cùng một đối tượng thay vì có các bản sao.)
dreua

4
thêm pythonic: [[0]*5 for _ in range(5)]với bộ đếm vòng lặp ẩn danh mà bạn không sử dụng
Jean-François Fabre

Rất vui khi bạn chỉ ra vấn đề sao chép nông trong ví dụ thứ hai.
whatacold

cảm ơn @dreua, tôi thực sự bối rối làm thế nào [0]*5hoạt động tốt. Bây giờ tôi hiểu tại sao [{0}]*8cũng là một ý tưởng tồi.
kuku

110

Nếu bạn muốn tạo một ma trận trống, cú pháp đúng là

matrix = [[]]

Và nếu bạn muốn tạo một ma trận có kích thước 5 chứa 0,

matrix = [[0 for i in xrange(5)] for i in xrange(5)]

@KorayTugay Vì ma trận được biểu diễn bằng (các) danh sách Python (các hàng) được lồng trong danh sách khác (các cột).
elig

2
Đối với Python-3, sử dụng hàm phạm vi thay vì xrange func
Rakesh Chaudhari

76

Nếu tất cả những gì bạn muốn là một thùng chứa hai chiều để chứa một số yếu tố, bạn có thể sử dụng từ điển một cách thuận tiện:

Matrix = {}

Sau đó, bạn có thể làm:

Matrix[1,2] = 15
print Matrix[1,2]

Điều này hoạt động vì 1,2là một tuple và bạn đang sử dụng nó làm chìa khóa để lập chỉ mục từ điển. Kết quả tương tự như một ma trận thưa thớt.

Như được chỉ định bởi osa và Josap Valls, bạn cũng có thể sử dụng Matrix = collections.defaultdict(lambda:0)để các phần tử bị thiếu có giá trị mặc định là 0.

Vatsal nói thêm rằng phương pháp này có thể không hiệu quả lắm đối với các ma trận lớn và chỉ nên được sử dụng trong các phần không quan trọng về hiệu năng của mã.


2
Sau đó, bạn cũng có thể làm import collections; Matrix = collections.defaultdict(float), để thay thế số không cho các phần tử chưa được khởi tạo.
osa

2
Sẽ không truy cập vào một lệnh cho tuple (1,2) vì khóa có độ phức tạp trong trường hợp xấu nhất là O (n). Như trong nội bộ, nó sẽ băm các bộ dữ liệu. Trong khi đó, việc sử dụng mảng 2D sẽ tạo ra độ phức tạp thời gian O (1) cho truy cập chỉ mục [1,2]. Vì vậy, sử dụng dict cho điều này không nên là sự lựa chọn tốt.
Vatsal

@Vatsal wiki.python.org/moin/TimeComplexity nói rằng trường hợp trung bình là O (1), nhưng bạn nói đúng về trường hợp xấu nhất. Dù sao, trừ khi bạn đang nói về RẤT NHIỀU MẶT HÀNG, bạn sẽ không quan tâm đến sự khác biệt này. Trên thực tế, tôi sẽ lo lắng về bộ nhớ hơn là thời gian truy cập.
enobayram

Ngoài ra, chúng tôi luôn cố gắng tránh sử dụng các dicts cho đến khi độ phức tạp chung của thuật toán bằng hoặc lớn hơn O (n ^ 2). Khi truy cập O (n) lần O (n) sẽ tạo ra độ phức tạp O (n ^ 2).
Vatsal

@enobayram, Xin lỗi nhưng tôi không đồng ý. Phân tích tiệm cận sẽ luôn cung cấp cho O (n ^ 2), nếu trường hợp xấu nhất truy cập O (n) được thực hiện 'n' lần. Khi phân tích khấu hao có thể đưa ra một ràng buộc ít hơn. Và có một sự khác biệt rất lớn giữa trường hợp khấu hao và trung bình ... vui lòng tham khảo trước khi đưa ra bất kỳ giả định và nhận xét mơ hồ nào
Vatsal

42

Trong Python bạn sẽ tạo một danh sách các danh sách. Bạn không phải khai báo kích thước trước thời hạn, nhưng bạn có thể. Ví dụ:

matrix = []
matrix.append([])
matrix.append([])
matrix[0].append(2)
matrix[1].append(3)

Bây giờ ma trận [0] [0] == 2 và ma trận [1] [0] == 3. Bạn cũng có thể sử dụng cú pháp hiểu danh sách. Ví dụ này sử dụng nó hai lần để xây dựng "danh sách hai chiều":

from itertools import count, takewhile
matrix = [[i for i in takewhile(lambda j: j < (k+1) * 10, count(k*10))] for k in range(10)]

6
extendcũng sẽ hữu ích trong trường hợp đầu tiên: Nếu bạn bắt đầu m = [[]], sau đó bạn có thể thêm vào danh sách bên trong (mở rộng một hàng) m[0].extend([1,2])và thêm vào danh sách bên ngoài (nối một hàng mới) với m.append([3,4]), các thao tác đó sẽ rời khỏi bạn [[1, 2], [3, 4]].
askewchan

22

Câu trả lời được chấp nhận là tốt và chính xác, nhưng tôi phải mất một thời gian để hiểu rằng tôi cũng có thể sử dụng nó để tạo ra một mảng hoàn toàn trống rỗng.

l =  [[] for _ in range(3)]

kết quả trong

[[], [], []]

22

Bạn nên lập một danh sách các danh sách, và cách tốt nhất là sử dụng các cách hiểu lồng nhau:

>>> matrix = [[0 for i in range(5)] for j in range(5)]
>>> pprint.pprint(matrix)
[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]

Trong [5][5]ví dụ của bạn , bạn đang tạo một danh sách có số nguyên "5" bên trong và cố gắng truy cập mục thứ 5 của nó và điều đó làm tăng IndexError một cách tự nhiên vì không có mục thứ 5:

>>> l = [5]
>>> l[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Trên thực tế, chuỗi cho row_index ('i') và cột_index ('j') như sau: '>>> matrix = [[0 cho cột_index trong phạm vi (5)] cho row_index trong phạm vi (5)]'
Aniruddha Kalburgi

22
rows = int(input())
cols = int(input())

matrix = []
for i in range(rows):
  row = []
  for j in range(cols):
    row.append(0)
  matrix.append(row)

print(matrix)

Tại sao một mã dài như vậy, mà quá Python bạn hỏi?

Lâu rồi tôi không thấy thoải mái với Python, tôi đã thấy các câu trả lời một dòng để viết ma trận 2D và tự nhủ rằng tôi sẽ không sử dụng ma trận 2 chiều trong Python nữa. (Những dòng đơn đó khá đáng sợ và nó không cung cấp cho tôi bất kỳ thông tin nào về những gì Python đang làm. Cũng lưu ý rằng tôi không biết về những tốc ký này.)

Dù sao, đây là mã cho người mới bắt đầu đến từ nền tảng C, CPP và Java

Lưu ý cho những người yêu thích và các chuyên gia về Python: Xin đừng bỏ phiếu chỉ vì tôi đã viết một mã chi tiết.


13

Viết lại để dễ đọc:

# 2D array/ matrix

# 5 rows, 5 cols
rows_count = 5
cols_count = 5

# create
#     creation looks reverse
#     create an array of "cols_count" cols, for each of the "rows_count" rows
#        all elements are initialized to 0
two_d_array = [[0 for j in range(cols_count)] for i in range(rows_count)]

# index is from 0 to 4
#     for both rows & cols
#     since 5 rows, 5 cols

# use
two_d_array[0][0] = 1
print two_d_array[0][0]  # prints 1   # 1st row, 1st col (top-left element of matrix)

two_d_array[1][0] = 2
print two_d_array[1][0]  # prints 2   # 2nd row, 1st col

two_d_array[1][4] = 3
print two_d_array[1][4]  # prints 3   # 2nd row, last col

two_d_array[4][4] = 4
print two_d_array[4][4]  # prints 4   # last row, last col (right, bottom element of matrix)

13

Sử dụng:

matrix = [[0]*5 for i in range(5)]

* 5 cho kích thước đầu tiên hoạt động vì ở cấp độ này, dữ liệu là bất biến.


5
Tôi có lẽ sẽ viết nó như làmatrix = [[0]*cols for _ in range(rows)]
Shital Shah

12

Để khai báo một ma trận các số không (những cái):

numpy.zeros((x, y))

ví dụ

>>> numpy.zeros((3, 5))
    array([[ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.]])

hoặc numpy.ones ((x, y)) vd

>>> np.ones((3, 5))
array([[ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.]])

Thậm chí ba chiều là có thể. ( http://www.astro.ufl.edu/~warner/prog/python.html xem -> mảng đa chiều)


12

Đây là cách tôi thường tạo các mảng 2D trong python.

col = 3
row = 4
array = [[0] * col for _ in range(row)]

Tôi thấy cú pháp này dễ nhớ so với việc sử dụng hai vòng lặp cho việc hiểu danh sách.


11

Tôi đang sử dụng tập lệnh Python đầu tiên của mình và tôi hơi bối rối với ví dụ ma trận vuông nên tôi hy vọng ví dụ dưới đây sẽ giúp bạn tiết kiệm thời gian:

 # Creates a 2 x 5 matrix
 Matrix = [[0 for y in xrange(5)] for x in xrange(2)]

vậy nên

Matrix[1][4] = 2 # Valid
Matrix[4][1] = 3 # IndexError: list index out of range

10

Sử dụng NumPy, bạn có thể khởi tạo ma trận trống như thế này:

import numpy as np
mm = np.matrix([])

Và sau đó nối thêm dữ liệu như thế này:

mm = np.append(mm, [[1,2]], axis=1)

Điều gì là ưu và nhược điểm của việc sử dụng numpy thay vì "hiểu danh sách"?
Cuộc cách mạng cho Monica

7

Tôi đọc các tệp được phân tách bằng dấu phẩy như thế này:

data=[]
for l in infile:
    l = split(',')
    data.append(l)

Danh sách "dữ liệu" sau đó là danh sách các danh sách có dữ liệu chỉ mục [hàng] [col]


7

Nếu bạn muốn có thể nghĩ nó như một mảng 2D thay vì bị buộc phải suy nghĩ theo danh sách các danh sách (theo ý kiến ​​của tôi tự nhiên hơn nhiều), bạn có thể làm như sau:

import numpy
Nx=3; Ny=4
my2Dlist= numpy.zeros((Nx,Ny)).tolist()

Kết quả là một danh sách (không phải là mảng NumPy) và bạn có thể ghi đè lên các vị trí riêng lẻ bằng số, chuỗi, bất cứ thứ gì.


numpy.matrixtương đương với numpy.zeroskhông số không mà không bị danh sách?
Cuộc cách mạng cho Monica

6

Đó là những gì từ điển được làm cho!

matrix = {}

Bạn có thể xác định khóagiá trị theo hai cách:

matrix[0,0] = value

hoặc là

matrix = { (0,0)  : value }

Kết quả:

   [ value,  value,  value,  value,  value],
   [ value,  value,  value,  value,  value],
   ...

6

Sử dụng:

import copy

def ndlist(*args, init=0):
    dp = init
    for x in reversed(args):
        dp = [copy.deepcopy(dp) for _ in range(x)]
    return dp

l = ndlist(1,2,3,4) # 4 dimensional list initialized with 0's
l[0][1][2][3] = 1

Tôi nghĩ NumPy là con đường để đi. Trên đây là một cái chung nếu bạn không muốn sử dụng NumPy.


Tôi thích nỗ lực này để làm một cái gì đó đơn giản với vani Python mà không phải sử dụng numpy.
Rick Henderson

4

bằng cách sử dụng danh sách:

matrix_in_python  = [['Roy',80,75,85,90,95],['John',75,80,75,85,100],['Dave',80,80,80,90,95]]

bằng cách sử dụng dict: bạn cũng có thể lưu trữ thông tin này trong bảng băm để tìm kiếm nhanh như

matrix = { '1':[0,0] , '2':[0,1],'3':[0,2],'4' : [1,0],'5':[1,1],'6':[1,2],'7':[2,0],'8':[2,1],'9':[2,2]};

ma trận ['1'] sẽ cho bạn kết quả trong thời gian O (1)

* nb : bạn cần xử lý một vụ va chạm trong bảng băm


4

Nếu bạn không có thông tin kích thước trước khi bắt đầu thì hãy tạo hai danh sách một chiều.

list 1: To store rows
list 2: Actual two-dimensional matrix

Lưu trữ toàn bộ hàng trong danh sách 1. Sau khi hoàn thành, nối danh sách 1 vào danh sách 2:

from random import randint

coordinates=[]
temp=[]
points=int(raw_input("Enter No Of Coordinates >"))
for i in range(0,points):
    randomx=randint(0,1000)
    randomy=randint(0,1000)
    temp=[]
    temp.append(randomx)
    temp.append(randomy)
    coordinates.append(temp)

print coordinates

Đầu ra:

Enter No Of Coordinates >4
[[522, 96], [378, 276], [349, 741], [238, 439]]

3
# Creates a list containing 5 lists initialized to 0
Matrix = [[0]*5]*5

Hãy cẩn thận về biểu thức ngắn này, xem phần giải thích đầy đủ trong câu trả lời của @ FJ


19
Hãy cẩn thận theo cách này, bởi vì Matrix[0], Matrix[1], ..., Matrix[4]tất cả đều trỏ đến cùng một mảng, vì vậy sau đó Matrix[0][0] = 3, bạn sẽ mong đợi Matrix[0][0] == Matrix[1][0] == ... == Matrix[4][0] == 3.
gongzhitaao

1
Cảm ơn gongzhitaao cho ý kiến ​​của bạn. Nếu tôi đọc nó lâu hơn, nó sẽ giúp tôi tiết kiệm ít nhất nửa giờ .. Có một ma trận trong đó mỗi hàng chỉ đến cùng một vị trí trong bộ nhớ dường như không hữu ích lắm, và nếu bạn không biết bạn đang làm gì Nó thậm chí còn nguy hiểm! Tôi khá chắc chắn đây không phải là điều Masoud Abasian, người đã đặt câu hỏi, muốn làm gì.
Adrian

7
Bạn nên loại bỏ câu trả lời này, vì nó không phải là câu trả lời đúng. Người mới bắt đầu có thể bị nhầm lẫn.
cxxl

2
Câu trả lời nào bạn đang đề cập đến? Tôi không thấy người dùng có tên "FJ" (thậm chí không có câu trả lời bị xóa).
Peter Mortensen

3
l=[[0]*(L) for _ in range(W)]

Sẽ nhanh hơn:

l = [[0 for x in range(L)] for y in range(W)] 

2
Câu trả lời trùng lặp của một đã được trả lời dưới đây. Cũng [[0]*(L) for i in range(W)]nên [[0]*(L) for _ in range(W)]kể từ khi ikhông được sử dụng bất cứ nơi nào
Ayush Mallanaga Vatsyayana

2

Bạn có thể tạo một danh sách hai chiều trống bằng cách lồng hai hoặc nhiều dấu ngoặc vuông hoặc dấu ngoặc thứ ba ( [], được phân tách bằng dấu phẩy) bằng một dấu ngoặc vuông, giống như dưới đây:

Matrix = [[], []]

Bây giờ giả sử bạn muốn nối thêm 1 vào Matrix[0][0]thì bạn gõ:

Matrix[0].append(1)

Bây giờ, gõ Matrix và nhấn Enter. Đầu ra sẽ là:

[[1], []]

1

Thử cái này:

rows = int(input('Enter rows\n'))
my_list = []
for i in range(rows):
    my_list.append(list(map(int, input().split())))

1

Trong trường hợp nếu bạn cần một ma trận với các số được xác định trước, bạn có thể sử dụng mã sau:

def matrix(rows, cols, start=0):
    return [[c + start + r * cols for c in range(cols)] for r in range(rows)]


assert matrix(2, 3, 1) == [[1, 2, 3], [4, 5, 6]]

1

Đây là đoạn mã để tạo ma trận trong python:

# get the input rows and cols
rows = int(input("rows : "))
cols = int(input("Cols : "))

# initialize the list
l=[[0]*cols for i in range(rows)]

# fill some random values in it
for i in range(0,rows):
    for j in range(0,cols):
        l[i][j] = i+j

# print the list
for i in range(0,rows):
    print()
    for j in range(0,cols):
        print(l[i][j],end=" ")

Xin đề nghị nếu tôi đã bỏ lỡ một cái gì đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.