【问题标题】:How to initialise a 2D array in Python?如何在 Python 中初始化二维数组?
【发布时间】:2014-06-03 19:12:19
【问题描述】:

我得到了伪代码:

    for i= 1 to 3
        for j = 1 to 3
            board [i] [j] = 0
        next j
    next i

我将如何在 python 中创建它?

(想法是创建一个 3 x 3 数组,使用 for 循环将所有元素设置为 0)。

【问题讨论】:

    标签: python arrays multidimensional-array pseudocode


    【解决方案1】:

    如果你真的想使用for-loops:

    >>> board = []
    >>> for i in range(3):
    ...     board.append([])
    ...     for j in range(3):
    ...         board[i].append(0)
    ... 
    >>> board
    [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    

    但是 Python 让你更容易做到这一点:

    >>> board = [[0]*3 for _ in range(3)]
    >>> board
    [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    

    【讨论】:

    • 我也可以使用它:nums = [[0]*4]*4,它工作正常。方法对吗?
    • @MehulMohan 不,因为每个子列表实际上都是同一个对象。试试nums[0][0] = 1 看看nums 会变成什么。
    • 哇@arshaji 你能详细说明为什么会这样吗?
    【解决方案2】:
    arr=[[0,0,0] for i in range(3)] # create a list with 3 sublists containing [0,0,0]
    arr
    Out[1]: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    

    如果您想要一个包含 5 个包含 4 个 0 的子列表的列表:

    In [29]: arr=[[0,0,0,0] for i in range(5)]
    
    In [30]: arr
    Out[30]: 
    [[0, 0, 0, 0],
     [0, 0, 0, 0],
     [0, 0, 0, 0],
     [0, 0, 0, 0],
     [0, 0, 0, 0]]
    

    范围指定你想要多少个子列表,范围从 0 开始,所以范围 4 是0,1,2,3,4。 给你五个[0,0,0,0]

    使用列表推导式与:

    arr=[]
    for i in range(5):
        arr.append([0,0,0,0])
    
    arr
    [[0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0]]
    

    【讨论】:

    • 你能解释一下你的答案吗?
    【解决方案3】:

    如果你想要更接近你的伪代码的东西:

    board = []
    for i in range(3):
        board.append([])
        for j in range(3):
            board[i].append(0)
    

    【讨论】:

      【解决方案4】:

      numpy 有这方面的东西:

      numpy.zeros((3,3))
      

      【讨论】:

        【解决方案5】:

        您可以使用给定的伪代码样式,也可以只使用 python one liner

        chess_board = [[x]*3 for _ in range(y)] --> 列表理解

        或者您可以使用其他语言(如 java)的普通循环样式。我更喜欢一个衬里,因为它看起来更好更干净。

        【讨论】:

          猜你喜欢
          • 2012-04-14
          • 2011-01-24
          • 1970-01-01
          • 2011-12-08
          • 2011-04-12
          • 2016-05-25
          • 2011-01-27
          相关资源
          最近更新 更多