Для создания двумерных массивов можно использовать вложенные генераторы, разместив
генератор списка, являющегося строкой, внутри генератора для строк. Например,
сделать список из n строк и m столбцов при помощи генератора,
создающего список из n элементов, каждый элемент которого является списком из
m нулей:
[ [0] * m for i inrange(n)]
Но при этом внутренний список также можно создать при помощи, например, такого генератора:
[0 for j in range(m)]. Вложив один генератор в другой получим вложенные генераторы:
[ [0for j inrange(m)] for i inrange(n)]
Но если число 0 заменить на некоторое выражение, зависящее от i
(номер строки) и j (номер столбца), то можно получить список, заполненный
по некоторой формуле.
В этом листке вам нужно будет придумать генераторы для заданных двумерных массивов.
Например, пусть нужно задать следующий массив (для удобства добавлены дополнительные пробелы между элементами):
000000012345024681003691215048121620
В этом массиве n = 5 строк, m = 6 столбцов, и элемент
в строке i и столбце j вычисляется по формуле:
A[i][j] = i * j.
Ответом на это задание будет выражение:
[[ i * j for j inrange(m)] for i inrange(n)]
Ответ, содержащий заданное выражение, нужно ввести в поле ввода (лучше - скопировав из работающей программы).
В выражении должны использоваться переменные n и m, означающие
число строк и столбцов в массиве. Если в задании сказано, что массив — квадратный, то число
строк и столбцов в нем равно n, а значение m не определено и использовать его нельзя.
В языке python есть конструкция, которая позволяет использовать if прямо внутри выражений. Например, можно писать
A = 1if i > j else0
или даже
A = some_number + (1if i > j else2if j < i else3) + other_number
Их можно использовать и в генераторах.
Впрочем, если условие нетривиально, то такую конструкцию лучше не использовать.
Если вы до сих пор не написали удобную функцию для печати двумерных списков, то можете воспользоваться следующей:
defstr4(x):
returnstr(x).rjust(4)
defprint_2_dim_array(A):
for row in A:
print(''.join(map(str4, row)))
Можно ещё короче, если вы уже понимаете, что такое lambda.
defprint_2_dim_array(A):
for row in A:
print(''.join(map(lambda _: str(_).rjust(4), row)))
Заполните прямоугольный массив целыми числами по образцу
(на главной диагонали стоят нули, выше нее стоят 1, затем 2, 0, 1 и т.д.
Номера всех диагоналей чередуются по циклу 0, 1, 2, ...).
Заполните квадратный массив целыми числами по образцу.
На побочной диагонали стоят единицы, каждая четвертая по счету
диагональ, параллельная побочной, также заполнена единицами.
Заполните прямоугольный массив целыми числами по образцу
(нули стоят на пересечении строк и столбцов с нечетными номерами, в остальных клетках стоят единицы).
Заполните квадратный массив целыми числами по образцу.
На главной и побочных диагоналях стоят нули, эти диагонали делят массив
на четыре части. В верхней части записаны единицы, в правой записаны
двойки, в нижней записаны тройки, в левой записаны четверки.
Заполните прямоугольный массив целыми числами начиная с единицы
по строчкам слева направо, строчки обходятся сверху вниз.
При этом в левом верхнем углу записано число 1, далее заполняются
только клетки, имеющие тот же цвет в шахматной раскраске, что и левый
верхний угол, а в остальных клетках записано число 0.
Заполните прямоугольный массив вложенными прямоугольниками.
Клетки, находящиеся на краях прямоугольника, заполняются числом 0, соседние с ними
клетки заполняются числом 1, соседние с ними — числом 2 и т.д.
Заполните квадратный массив целыми числами по образцу.
В углах записан число 0, в соседних с ними с углами клетках
записано число 1, в соседних с ними клетках записано число 2 и т.д.
Клетки считаются соседними, если у них есть общая сторона или вершина.
Заполните квадратный массив целыми числами по образцу.
В углах записан число 0, в соседних с ними с углами клетках
записано число 1, в соседних с ними клетках записано число 2 и т.д.
Клетки считаются соседними, если у них есть общая сторона.
Заполните квадратный массив целыми числами по образцу.
Часть массива ниже главной диагонали заполнена нулями. На главной диагонали
записаны числа 0, 1, ..., n - 1. На диагонали выше главной —
числа n, n + 1, ..., 2n - 2. Следующая диагональ заполняется, начиная
с числа 2n - 1 и т.д.
Заполните прямоугольный массив целыми числами начиная с нуля
вдоль диагоналей, параллельных побочной диагонали. Заполнение
проводится сверху вниз, диагонали обходятся слева направо.