我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
IndexError:列表索引超出范围
我想定义一个没有初始化长度的二维数组,如下所示:
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],
...