我总是以这种方式编写这部分代码:每次我需要它时,我都使用这个python代码:
for x in range(8):
a.append([])
for y in range(8):
a[x].append(0)
但是,我想知道是否有办法美化这段代码。 我的意思是,你如何在python中创建一个二维矩阵,并用0填充它?
答案 0 :(得分:18)
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。结果列表定义往往比使用这些结构构建的列表更清晰。