Начиная в y = t([[1,2,3],[4,5,6]])
:
xs
определяется как [[1,2,3],[4,5,6]]
с вышеупомянутым вызовом
Давайте теперь проанализировать возможные результаты каждый for
в списке понимания:
for j in range(len(xs[0]))
должен давать значения в пределах диапазона 0 <= x <= 2
таких, что x
представляет собой целое число в виде неравенства или [0,1,2]
если мы должны были представить его в виде массива.
for i in range(len(xs))
должен давать значения в пределах диапазона 0 <= x <= 1
таким образом, что x
представляет собой целое число в виде неравенства или [0,1]
если мы должны были представить его в виде массива.
Так что же на самом деле происходит?
В понимании списка есть понимание списка, поэтому вы собираетесь создавать массивы в понимании.
Начиная с начального значения j
в течение первой итерации дается ссылка 0
. С i
; он будет иметь два значения для j
. Эти значения для i
будут [0,1]
, если мы представим его в виде списка.
Таким образом, первый список внутри внутреннего понимания - [1,4]
. «в целом» представление данных в списке понимание в конце первой итерации j
теперь [[1,4]]
Когда j
является 1
; снова будут два возможных значения для i
. Значения для i
: [0,1]
, поскольку мощность xs
равна 2
.
Возврат внутреннего списка i
; ваш результат будет [2,5]
. Общий список будет выглядеть как [[1,4],[2,5]]
в конце второй итерации.
Аналогично процесс будет следовать за 3 итерации, который затем дает результат [[1,4],[2,5],[3,6]]
Рассуждение является комбинация списковых, массив/список индексации и случаи использования range
функции на Python.
Спасибо за это, имеет смысл теперь с расширенным кодом. –
Я верю, что циклы 'for' в этом последнем примере кода переключаются. '[x для y в z для x в y]' эквивалентно 'для y в z: для x в y: result.append (x)' –
Ну, порядок цикла здесь не имеет значения .. если он логически эквивалент. – gjha