如何从输入数据创建二维列表?

新手上路,请多包涵

我正在尝试这个

n = int(input())
m = int(input())
print(n,m)
for i in range(0,n):
    for j in range(0,m):
        ar[i][j] = int(input())
for i in range(0,n):
    for j in range(0,m):
        print (ar[i][j])

但它显示错误

Traceback (most recent call last):
  File "C:/Users/shivansh/Desktop/test.py", line 6, in <module>
    ar[i][j] = int(input())
NameError: name 'ar' is not defined

我曾经用 C 语言做同样的事情,但它有效。那么,如何在 Python 中做到这一点?

原文由 Shivansh Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 568
2 个回答

您尚未声明 ar 。在 Python 中,您不必执行单独的声明和初始化;尽管如此,您不能随意对名称执行 _操作_。

从这样的事情开始:

 ar = [[0 for j in range(m)] for i in range(n)]

原文由 Arya McCarthy 发布,翻译遵循 CC BY-SA 3.0 许可协议

你应该知道 ar 没有定义当你试图执行像 ar[i][j] = int(input()) 这样的任务时,有很多方法可以解决这个问题。

在 C/C++ 中

在 C/C++ 中,我假设你会做这样的工作:

 #include <cstdio>

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;
}

Before you get inputs by scanf in C/C++, you should allocate storage by calling new or malloc , then you can perform your scanf ,否则它会崩溃。

如何在 Python 中这样做

根据您的代码,这与您在 C/C++ 中所做的非常相似,当您尝试对 ar[i][j] 执行赋值时,Python 不知道 ar 是什么!所以你必须先让它知道。

一种非pythonic方式

一种非 Pythonic 的方式是做一些你在 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])

您通过 ar = [] 初始化列表,就像您在 C/C++ 中所做的 int **ar = new int*[m]; 一样。对于二维列表中的每一行,使用 ar.append([]) 初始化该行,就像你在 C/C++ 中所做的 ar[i] = new int[n]; --- 一样。然后,使用 input 获取数据并将其附加到 ar[i]

一种蟒蛇式的方式

像上面那样执行这样的工作的方法不是很pythonic,相反,您可以通过使用一个名为 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])

Note that the core ar = [[0 for j in range(n)] for i in range(m)] is a list comprehension that it creates a list which has m lists and for each list of these m lists it has n 0s。

原文由 Time1ess 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题