我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
IndexError:列表索引超出范围
我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
IndexError:列表索引超出范围
当前回答
如果您需要具有预定义数字的矩阵,可以使用以下代码:
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]]
其他回答
# Creates a list containing 5 lists initialized to 0
Matrix = [[0]*5]*5
注意这个简短的表达,请参见@F.J的答案中的完整解释
l=[[0]*(L) for _ in range(W)]
将快于:
l = [[0 for x in range(L)] for y in range(W)]
从技术上讲,您正在尝试对未初始化的数组进行索引。在添加项目之前,必须先用列表初始化外部列表;Python调用此“列表理解”。
# 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)]
#您现在可以向列表中添加项目:
Matrix[0][0] = 1
Matrix[6][0] = 3 # error! range...
Matrix[0][6] = 3 # valid
注意,矩阵是“y”地址主,换句话说,“y索引”在“x索引”之前。
print Matrix[0][0] # prints 1
x, y = 0, 6
print Matrix[x][y] # prints 3; be careful with indexing!
尽管您可以根据自己的意愿命名它们,但我这样看是为了避免索引中可能出现的一些混淆,如果您对内部和外部列表都使用“x”,并且希望使用非方形矩阵。
可以通过将两个或多个方括号或第三个方括号([],用逗号分隔)与方括号嵌套来创建一个空的二维列表,如下所示:
Matrix = [[], []]
现在假设您想将1附加到矩阵[0][0],然后键入:
Matrix[0].append(1)
现在,键入矩阵并按Enter键。输出将为:
[[1], []]
如果您输入以下语句
Matrix[1].append(1)
那么矩阵将是
[[], [1]]
输入矩阵和打印的用户定义功能
def inmatrix(m,n):
#Start function and pass row and column as parameter
a=[] #create a blank matrix
for i in range(m): #Row input
b=[]#blank list
for j in range(n): # column input
elm=int(input("Enter number in Pocket ["+str(i)+"]["+str(j)+"] ")) #Show Row And column number
b.append(elm) #add value to b list
a.append(b)# Add list to matrix
return a #return Matrix
def Matrix(a): #function for print Matrix
for i in range(len(a)): #row
for j in range(len(a[0])): #column
print(a[i][j],end=" ") #print value with space
print()#print a line After a row print
m=int(input("Enter number of row")) #input row
n=int(input("Enter number of column"))
a=inmatrix(m,n) #call input matrix function
print("Matrix is ... ")
Matrix(a) #print matrix function