【问题标题】:Create 2D matrix using python使用python创建二维矩阵
【发布时间】:2022-09-30 22:58:16
【问题描述】:

我必须使用 python 创建 2 x 3 矩阵,并且每个数字都必须递增

rows = int(input())
cols = int(input())

rows = 2
cols = 3
matrix = []
for i in range(rows):
    row = []
    i = 1
    for j in range(cols):
        i = i + 1
        row.append(i)
        
    matrix.append(row)

print(matrix)

我的出局是[[2, 3, 4], [2, 3, 4]]

如果第一个数字是 1,那么 [[1,2,3],[4,5,6]] 每个数字都必须递增

    标签: python


    【解决方案1】:

    错误是您将变量 i 用于两件事。一个用于您的 for 循环 (for i in ...) 并作为要附加的值。此外,您在循环内设置i=1,您希望在开始时进行初始化。我已更改要附加到value 的值的名称:

    rows = 2
    cols = 3
    matrix = []
    
    value = 0
    for i in range(rows):
        row = []
        for j in range(cols):
            value = value + 1
            row.append(value)
            
        matrix.append(row)
    
    print(matrix)
    

    输出: [[1, 2, 3], [4, 5, 6]]

    【讨论】:

      【解决方案2】:

      我建议一般使用 Numpy 来处理矩阵和 N 维数组。使用它可以最轻松地完成您的任务:

      import numpy as np
      
      rows = int(input())
      cols = int(input())
      
      total = rows * cols + 1
      matrix = np.arange(1, total).reshape((rows, cols))
      print(matrix)
      

      话虽如此,如果您想要纯 Python,则需要考虑当前行:在行 i 矩阵已经包含 i * cols 数字!

      rows = int(input())
      cols = int(input())
      
      rows = 2
      cols = 3
      matrix = []
      for i in range(rows):
          row = []
          for j in range(cols):
              row.append(i * cols + j + 1)
              
          matrix.append(row)
      
      print(matrix)
      

      您可以将所有这些都放在理解列表中:

      rows = int(input())
      cols = int(input())
      matrix = [[i * cols + j + 1 for j in range(cols)] for i in range(rows)]
      print(matrix)
      

      【讨论】:

        【解决方案3】:

        这为您提供了您要求的输出:

        import numpy as np
        np.array([x for x in range(6)]).reshape((2,3))
        

        输出:

        array([[0, 1, 2],
               [3, 4, 5]])
        

        如果您需要它从 1 开始:

        import numpy as np
        
        np.array([x+1 for x in range(6)]).reshape((2,3))
        

        输出:

        array([[1, 2, 3],
               [4, 5, 6]])
        

        【讨论】:

          【解决方案4】:

          numpy 可能是一个矫枉过正,除非您已经计划使用 numpy 进行其他数字处理。

          使用列表推导式按升序创建嵌套列表很简单:

          list(list(range(r * rows, r * rows + cols)) for r in range(rows))
          # [[0, 1, 2], [2, 3, 4]]
          

          如果你想有一个初始值i

          i = 1
          list(list(range(r*rows+i, r*rows+cols+i)) for r in range(rows))
          # [[1, 2, 3], [3, 4, 5]]
          

          【讨论】: