我想定义一个没有初始化长度的二维数组,如下所示:

Matrix = [][]

但这给出了一个错误:

IndexError:列表索引超出范围


当前回答

如果你只需要一个二维容器来容纳一些元素,你可以方便地使用字典来代替:

Matrix = {}

然后您可以执行以下操作:

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

这是因为1,2是一个元组,您将其用作索引字典的键。结果类似于哑稀疏矩阵。

如osa和Josap Valls所示,您还可以使用Matrix=collections.defaultdict(lambda:0),以便丢失的元素具有默认值0。

Vatsal进一步指出,这种方法对于大型矩阵可能不是很有效,只应在代码的非性能关键部分使用。

其他回答

如果要创建空矩阵,正确的语法是

matrix = [[]]

如果你想生成一个大小为5、填充有0的矩阵,

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

公认的答案是正确的,但我花了一段时间才明白,我也可以使用它创建一个完全空的数组。

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

结果

[[], [], []]

如果您需要具有预定义数字的矩阵,可以使用以下代码:

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]]

输入矩阵和打印的用户定义功能

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

这就是词典的用途!

matrix = {}

可以通过两种方式定义键和值:

matrix[0,0] = value

or

matrix = { (0,0)  : value }

结果:

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