Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建二维数组的Pythonic方法?_Python - Fatal编程技术网

创建二维数组的Pythonic方法?

创建二维数组的Pythonic方法?,python,Python,我想创建一个初始设置为0的整数值的二维数组 这就是我的想法: grid = [[0] * width] * height 但这只是创建每一行作为对原始行的引用,所以 grid[0][1] = 1 将修改所有网格[n][1]值 这是我的解决方案: grid = [[0 for x in range(width)] for y in range(height)] 这感觉不对,有没有更好的更像蟒蛇的方法 编辑: 另外一个问题是,如果网格大小永远不会改变,并且只包含整数,我应该使用元组或array

我想创建一个初始设置为0的整数值的二维数组

这就是我的想法:

grid = [[0] * width] * height
但这只是创建每一行作为对原始行的引用,所以

grid[0][1] = 1
将修改所有网格[n][1]值

这是我的解决方案:

grid = [[0 for x in range(width)] for y in range(height)]
这感觉不对,有没有更好的更像蟒蛇的方法

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

。因此,2D列表初始化可以这样完成

[[0] * width for y in range(height)]
您可以使用:

如果必须是整数,请使用as option
dtype=numpy.int8

以下是我使用的

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

是的,我以前用过numpy,但我试图避免当前项目的外部依赖性。为什么不:
[[0]*width]*height
@zeffii,它将只创建一个列表
[0]*width]
(将此视为
l1
),并创建一个包含
height
元素的列表,它们都是对
l1
的引用。因此,更改任何列表也会反映在所有其他列表上。
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