如何在Python中初始化一个二维数组?

6

我收到了伪代码:

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

我该如何在Python中创建这个数组?
(想法是使用for循环创建一个3x3的数组,其中所有元素都设置为0)。
5个回答

18

如果你真的想要使用 for 循环:

>>> 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,并且它能够正常工作。这是正确的方法吗? - mehulmpt
8
不行,因为每个子列表实际上都是同一个对象。尝试执行 nums[0][0] = 1 然后查看 nums 的结果。 - arshajii
1
哇,@arshaji,你能详细说明为什么会发生这种情况吗? - mehulmpt

4
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]]

你可以解释一下你的回答吗? - bjb568

2
如果您希望接近伪代码的实现方式:
board = []
for i in range(3):
    board.append([])
    for j in range(3):
        board[i].append(0)

0

你可以使用伪代码给出的样式,或者只需使用 Python 的一行代码。

chess_board = [[x]*3 for _ in range(y)] --> 列表推导式

或者你可以使用其他语言(如 Java)的普通循环样式。我更喜欢一行代码,因为它看起来更漂亮、更干净。


0

NumPy有相关的功能:

numpy.zeros((3,3))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接