给定值n
,最有效的方法是创建列索引和行大小等于值n
的零索引矩阵?
我知道以下命令将创建一个二维矩阵,其中所有单元格值均为0:
[[0 for x in range(n)] for y in range(n)]
因此,当n = 4
时,矩阵将如下所示:
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
但是有什么方法可以如下创建矩阵?
[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]]
答案 0 :(得分:1)
您可以简单地使用当前坐标x
和y
来计算值x + y*n
:
n = 4
print([[x + y*n for x in range(n)] for y in range(n)])
您可以使用itertools.count
:
from itertools import count
n = 4
counter = count()
print([[next(counter) for x in range(n)] for y in range(n)])
答案 1 :(得分:1)
由于您在谈论二维矩阵,并且您特别在询问效率,因此最好转向numpy
:
import numpy as np
n = 4
my_matrix = np.arange(n*n).reshape(n,n)
>>> my_matrix
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
或者您可以使用以下列表理解(或@hiroprotagonist建议的一种):
n = 4
my_ListOfLists = [list(range(i,i+n)) for i in range(0,n*n,n)]
>>> my_ListOfLists
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]]
答案 2 :(得分:0)
类似的事情会起作用。
[[i for i in range(j, j + 4)] for j in range(0, 20, 4)]
[[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]]