я скорее использую numpy ( ЭТО НЕ СПИСОК , поэтому я знаю, что это не обязательный OP, однако он все еще может быть интересным)
def func(n):
l = np.asarray([i for i in range(1,n**2+1)])
return l.reshape(n,n)
func(3)
>>> array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
также учитывайте времядля вычисления:
def func(n):
t = time.time()
np.arange(1, n**2 + 1).reshape((n, n))
t1 = time.time()-t
t = time.time()
np.asarray([i for i in range(1,n**2+1)]).reshape(n,n)
t2 = time.time()-t
t = time.time()
[list(range(1+n*i, 1+n*(i+1))) for i in range(n)]
t3 = time.time()-t
t = time.time()
itr = itertools.count(1) # start counting at 1
matrix = [[next(itr) for _ in range(n)] for _ in range(n)]
t4 = time.time()-t
return [t1,t2,t3,t4]
plt.plot([re[0] for re in res],'r',label = 'numpy')
plt.plot([re[1] for re in res],'b',label = 'asarray')
plt.plot([re[2] for re in res],'m',label = 'list')
plt.plot([re[3] for re in res],'g',label = 'itertool')
plt.legend()
plt.savefig('plt1.png')
даст следующий график для 200 точек: 
для большой матрицы, перейдите прямо к пустому решению @ jpp