Pythonic方式创建2d数组?

时间:2014-03-04 15:23:30

标签: python

我想创建一个最初设置为0的2d整数值数组。

这就是我的想法:

grid = [[0] * width] * height

但是这只是创建每一行作为原始的引用,所以做类似

的事情
grid[0][1] = 1

将修改所有grid [n] [1]值。

这是我的解决方案:

grid = [[0 for x in range(width)] for y in range(height)]

感觉不对,是否有更好的更多pythonic方式来做到这一点?

编辑: 奖金问题,如果网格大小永远不会改变并且只包含整数,我应该使用类似元组或array.array的东西吗?

3 个答案:

答案 0 :(得分:4)

Since numbers are immutable, using * to create a list should be fine。因此,2D列表初始化可以像这样完成

[[0] * width for y in range(height)]

答案 1 :(得分:1)

您可以使用numpy.zeros

import numpy as np
numpy.zeros(height, width)

如果必须将整数用作选项dtype=numpy.int8

答案 2 :(得分:0)

这是我使用的。

def generate_board(n): #Randomly creates a list with n lists in it, and n random numbers
                       #in each mini list
    list = []
    for i in range(0, n):
        list.append([])
        for j in range(0, n):
            list[i].append(random.randint(0, 9))
    return list

def print_board(board):
    n = len(board) - 1
    while n > -1:
        print str(board[n]) + ' = ' + str(n)
        n -= 1