你应该知道,当你试图执行像ar[i][j] = int(input())这样的赋值时,没有定义ar,有很多方法可以解决这个问题。< C/C++ +< /H2>
在C/C++中,我假设你会做这样的工作:#include
int main()
{
int m, n;
scanf("%d %d", &m, &n);
int **ar = new int*[m];
for(int i = 0; i < m; i++)
ar[i] = new int[n];
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
scanf("%d", &ar[i][j]);
// Do what you want to do
for(int i = 0; i < m; i++)
delete ar[i];
delete ar;
return 0;
}
在C/C++中通过{{CD3}}获得输入之前,您应该通过调用^ {< CD4>}或^ {CD5>}来分配存储,然后您可以执行^ {< CD3>},否则它会崩溃。
在Python中如何做到这一点<>这与你在C/C++中所做的非常相似,根据你的代码,当你试图执行赋值到{{CD7}}时,Python就不知道什么是{{CD1}}!所以你必须先让它知道。
不是Python的方式
一个非纵横的方式是在C/C++中做的事情:n = int(input())
m = int(input())
ar = []
for i in range(m):
ar.append([])
for j in range(n):
k = int(input())
ar[i].append(k)
for i in range(m):
for j in range(n):
print(ar[i][j])
你按{{CD9}}初始化列表,就像你在C/C++中所做的^ {CD10>}一样。对于2-D列表中的每一行,使用^ {CD11}}初始化行,就像C++中的{{CD12}}一样。然后,使用input获取数据并将其附加到ar[i]。
顽皮的方式
执行上述任务的方法不是很像Python,相反,您可以使用名为List Comprehensions的功能来完成,然后代码可以简化为:n = int(input())
m = int(input())
ar = [[0 for j in range(n)] for i in range(m)]
for i in range(m):
for j in range(n):
k = int(input())
ar[i][j] = k
for i in range(m):
for j in range(n):
print(ar[i][j])
请注意,核心ar = [[0 for j in range(n)] for i in range(m)]是一个列表理解,它创建一个具有m列表的列表,并且对于这些m列表的每个列表,它都具有n0s