Вашему решению будет предоставлена единственная переменная n
— необходимый размер таблицы умножения.
Напишите списочное выражения для генерации таблицы умножения.
Примечание
В решении не должно быть ничего, кроме списочного выражения.
Пример
Ввод
n = 3
Вывод
[[1, 2, 3], [2, 4, 6], [3, 6, 9]]
Ввод
n = 4
Вывод
[[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12], [4, 8, 12, 16]]
Решение
Списочные выражения по-началу воспринимаются довольно трудно.
Приведу картинку, которая объясняет как они устроены по отношению к обычным циклам.
В случае затруднений всегда можно сначала написать обычный код, а потом “обернуть” его в списочное выражение. Единственное различие в нашем случае с примером выше состоит в том, что пример порождает плоский список, а нам необходимо, чтобы получился список списков, поэтому нужно “обернуть” одно списочное выражение в другое.
Посмотреть код
Решение
[[(i + 1) * (j + 1) for j in range(n)] for i in range(n)]
если сначала итерируется внутренний (вложенный) цикл, который судя по схеме в строчном варианте находится правее внешнего, то почему в решении этой задачи со списком сначала итерируется левый for, истина где-то рядом, но она ускользает от меня =)
тут вложенное списочное выражение и оно итерируется так: сначала берется первый элемент выражения, чья скобочка открылась первым, потом итерируется вложенный элемент. от внешних скобочек к внутренним, сколько бы их там не было.
Правильно ли я понимаю последовательность?
сначала j присваивается значение 0 j=0
после чего i=0
далее происходит вычисление и выдача (i + 1) * (j + 1)
следующим шагом j всё так же 0, а i проходит на следующую итерацию i = 1
(И большее вам спасибо за разъяснения)
Немного не так. давайте упростим. По сути мы имеем дело со списочным выражением где вычисляем некий expression (далее схематичный, нелигитимный с точки зрения пайтона пример)
[expression for i in range(n)]
Вместо expression мы можем подставить другое списочное выражение. Допустим, наше exression это некий [item for j in range(n)]
получается
[[item for j in range(n)] for i in range(n)]
И вот теперь вместо item мы подставляем то, то нас интересует в действительности и получаем искомое списочное выражение.
Поэтому СНАЧАЛА i = 0, j = 0, потом итерируемся по j и только потом по i
спасибо, разобрался