• Если вход 1, то выход [ [1] ]
  • Если на входе 2, то на выходе будет массив [ [1,2],[3,4] ] 2x2
  • если вход 3, то выход [ [1,2,3],[4,5,6],[7,8,9] ] массив 3x3

Относительно числа значение будет продолжать увеличиваться

# A is input
A = 3
matrix = [[0]*A for i in range(A)]
# matrix = []
for i in range(A):
    for j in range(A):
        matrix.append(matrix[i][j])
matrix

Я пробовал с кодом ниже

matrix = [[i+1 for i in range(3)] for i in range(3)]
matrix

Я получаю [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

0
abd 10 Окт 2021 в 14:00

3 ответа

Лучший ответ

Код почти правильный, за исключением строки matrix.append(matrix[i][j]). Давайте немного покопаемся ...

  1. Рассмотрим линию

    matrix = [[0]*A for i in range(A)]
    

    Здесь создается новая матрица формы A x A, что и ожидается в окончательном ответе.

  2. Затем у нас есть два цикла for, которые повторяются по каждой строке и каждому столбцу.

    for i in range(A):      # Iterating through each rows
        for j in range(A):  # Iterating through each columns
            ...
    
  3. Теперь посмотрим на ошибочную строку

    matrix.append(matrix[i][j])
    

    Эта строка добавляет новые значения в конце идеально точной матрицы, которая искажает окончательную форму матрицы.

Вместо этого вам нужно назначить значения в соответствующей строке и столбце. Фактически, примерно так:

matrix[i][j] = ...

Теперь в правой части приведенного выше выражения идет (i * A) + (j + 1). Итак, вы можете переписать свою программу следующим образом:

A = 3

# Initialize the matrix
matrix = [[0]*A for i in range(A)]

for i in range(A):
    for j in range(A):
        # Replace the value at the corresponding row and column
        matrix[i][j] = (i * A) + (j + 1)

print(matrix)

Выход:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Это чистое решение Python, поэтому для него не требуется какая-либо внешняя библиотека.

1
Melvin Abraham 10 Окт 2021 в 11:16

Если вы не хотите использовать numpy, вы можете использовать понимание списка:

In [1]: a = 3

In [2]: [[j for j in range(((i-1)*a)+1, (a*i)+1)] for i in range(1, a+1)]
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

1
MJafari 10 Окт 2021 в 11:14

Разделение n ^ 2 чисел на n ячеек:

np.array_split(np.arange(n**2)+1, n)

В деталях:

import numpy as np
for n in range(1,4):
    print(np.array_split(np.arange(n**2)+1, n))

Выход:

[array([1])]
[array([1, 2]), array([3, 4])]
[array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
1
yascho 10 Окт 2021 в 11:59