【问题标题】:Between Python and c++ 2d array initialization. What is this ? and why?Python 和 c++ 之间的二维数组初始化。这是什么 ?为什么?
【发布时间】:2020-10-17 16:57:51
【问题描述】:

机器人位于 m x n 网格的左上角(在下图中标记为“开始”)。

机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角(在下图中标记为“完成”)。

有多少种可能的独特路径?

我想出了解决方案,并用我的本地编程语言 C++ 编写了代码。

类解决方案{
民众:
    int uniquePaths(int m, int n) {
        向量> 矩阵(m, 向量(n, 0));
        for (int i = 0; i 

二维向量被初始化为arr[m][n]

在学习 Python 时,我决定也用 Python 来解决它。我遇到了一个荒谬的问题。这里,

arr = [[0 for x in range(n)] for y in range(m)] 

我将二维数组初始化为

arr = [[0 for x in range(m)] for y in range(n)] 

而且,我的错误列表索引超出范围。我真的搞砸了从干草中找出这根针,但无论如何我明白了。你能解释一下为什么即使一切都一样,行和列之间会发生这些冲突吗?

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        if m == 0 or n == 0:
            return 0
        arr = [[0 for x in range(n)] for y in range(m)] 
        for i in range(m):
            arr[i][0] = 1
        for j in range(n):
            arr[0][j] = 1
        for i in range(1,m):
            for j in range(1,n):
                arr[i][j] = arr[i][j-1] + arr[i-1][j]
        return arr[m-1][n-1]    

这里是问题链接供参考:Unique paths-leetcode

【问题讨论】:

  • 术语挑剔:那些是列表,而不是数组。在任何情况下,当您执行 [[0 for x in range(m)] for y in range(n)] 时,您正在创建一个 listn 其他列表,每个列表都包含 m 0。

标签: python c++ arrays vector


【解决方案1】:

在您的 C++ 代码中:

vector<vector<int>> matrix(m, vector<int>(n, 0));

您正在创建一个由 m 向量组成的向量,每个向量都包含初始化为 0 的 n 元素。这就像一个由 m 行 x n 列组成的二维矩阵。

Python中的等效代码是:

arr = [[0 for x in range(n)] for y in range(m)]

这是一个列表理解。对于具有 C++ 背景的人来说,这种语法是从前向后看的,但列表理解的格式是:

[ expression for item in list if conditional ]

因此,对于0m 范围内的每个索引,您创建一个包含n 零的内部列表,即m x n 矩阵。

这段代码:

arr = [[0 for x in range(m)] for y in range(n)]

不等同于您的 C++ 代码。它正在生成n 列表的列表,每个列表都包含m 零,即n x m 矩阵。因此你得到的错误。

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多