在Python中创建2D矩阵的更优雅方式

时间:2011-12-10 17:15:20

标签: python loops matrix

  

可能重复:
  How to initialize a two-dimensional array in Python?

我总是以这种方式编写这部分代码:每次我需要它时,我都使用这个python代码:

for x in range(8):
        a.append([])
        for y in range(8):
            a[x].append(0)

但是,我想知道是否有办法美化这段代码。 我的意思是,你如何在python中创建一个二维矩阵,并用0填充它?

4 个答案:

答案 0 :(得分:18)

使用nested list comprehensions

a = [[0 for y in range(8)] for x in range(8)]

相当于

a = []
for x in range(8):
    row = []
    for y in range(8):
        row.append(0)
    a.append(row)

答案 1 :(得分:3)

试试这个:

a = [[0]*8 for _ in xrange(8)]

它使用列表推导以及*运算符可以应用于列表以使用给定元素的n副本填充它们的事实。

甚至更好,为返回给定大小的矩阵编写通用函数:

# m: number of rows, n: number of columns
def create_matrix(m, n):
    return [[0]*n for _ in xrange(m)]

a = create_matrix(8, 8)

答案 2 :(得分:2)

列表理解更简洁。

a = [[0 for i in xrange(8)] for i in xrange(8)]
print a

如果您要对数组进行数值计算,也可以使用numpy arrays Numpy.zeros 函数创建一个零维的多维数组。

import numpy as np

a = np.zeros((8,8))

答案 3 :(得分:1)

您可以使用list comprehensions。由于您并不真正关心range提供的值,因此您可以使用_,这通常代表一个不感兴趣的值。

>>> z = [[0 for _ in range(8)] for _ in range(8)]
>>> import pprint
>>> pprint.pprint(z)
[[0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0], 
 [0, 0, 0, 0, 0, 0, 0, 0]]
  

列表推导提供了一种简洁的方法来创建列表而无需使用map(),filter()和/或lambda。结果列表定义往往比使用这些结构构建的列表更清晰。