python - Python 和 c++ 之间的二维数组初始化。这是什么 ?为什么?

标签 python c++ arrays vector

机器人位于 m x n 网格的左上角(在下图中标记为“开始”)。
机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角(在下图中标记为“完成”)。
有多少种可能的独特路径?
我想出了解决方案,并用我的本地编程语言 C++ 编写了代码。

class Solution {
public:
    int uniquePaths(int m, int n) {
        vector<vector<int>> matrix(m, vector<int>(n, 0));
        for (int i = 0; i < m; i++) {
            matrix[i][0] = 1;
        }
        for (int j = 0; j < n; j++) {
            matrix[0][j] = 1;
        }
        for(int i = 1; i < m; i++) {
            for(int j = 1; j < n; j++) {
                matrix[i][j] = matrix[i][j-1] + matrix[i-1][j];
                
            }
        }
        return matrix[m-1][n-1];
    }
};

The 2d vector being initialized as arr[m][n]

As I am learning Python I decided to solve it in Python as well. I faced an absurd problem. Here,

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

最佳答案

在您的 C++ 代码中:

vector<vector<int>> matrix(m, vector<int>(n, 0));
您正在创建 m 的 vector 每个包含 n 的 vector 初始化为 0 的元素。这就像 m 的二维矩阵行 x n列。
Python中的等效代码是:
arr = [[0 for x in range(n)] for y in range(m)]
这是一个列表理解。对于来自 C++ 背景的人来说,这种语法看起来是从头到尾的,但列表理解的格式是:
[ expression for item in list if conditional ]
因此,在您的情况下,对于 0 范围内的每个索引至m您创建一个包含 n 的内部列表零,即 m x n矩阵。
这段代码:
arr = [[0 for x in range(m)] for y in range(n)]
不等同于您的 C++ 代码。它正在生成 n 的列表列表,每个包含 m零,即 n x m矩阵。因此你得到的错误。

关于python - Python 和 c++ 之间的二维数组初始化。这是什么 ?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62605777/

相关文章:

arrays - 我似乎无法正确取消引用数组

uint8_t 到字符串的转换 [C]

python - 将多行连接到 Pandas 中的一行

c++ - 错误 :sorry, 未实现:在函数模板中使用 decltype 时,函数模板签名中存在字符串文字

c++ - Qt 中是否有一个 native "file explorer"可用于让用户选择特定文件的路径?

Javascript Array 函数有我看不到的错误

python - 有没有keras方法来拆分数据?

python - 尝试使用 Python 3 运行 Flask 时出现 "ImportError: No module named SocketServer"

python - 如何避免 python Tkinter 中的键盘冲突?

c++ - 为什么编译器允许使用与所用容器不同的值类型的分配器