Понимание понимания вложенного списка

Я хочу понять понимание вложенного списка. Ниже я перечислил выражение понимания списка и их эквивалент для цикла.
Интересно, правильно ли мое понимание этих вопросов?

Например,

[(min([row[i] for row in rows]),max([row[i] for row in rows])) 
for i in range(len(rows[0]))]

эквивалентно

result=[]
for i in range(len(rows[0])):
  innerResult=[]
  for row in rows:
    innerResult.append(row[i])
  innerResult2=[]
  for row in rows:
    innerResult2.append(row[i])
  tuple=(min(innerResult), max(innerResult2))
  result.append(tuple)

Если я могу обобщить, я думаю,

[exp2([exp1 for x in xSet]) for y in ySet]

Форма может быть переведена на следующее. (Надеюсь, я прав в этом)

result=[]
for y in ySet:
  innerResult =[]
  for x in xSet:
    innerResult.append(exp1)
  exp2Result = exp2(innerResult)
  result.append(exp2Result)

Для более простого случая,

[exp1 for x in xSet for y in ySet] 

равно

result=[] 
for x in xSet:
  for y in ySet: 
    result.append(exp1)

в то время как,

[[exp1 for x in xSet] for y in ySet]

равно

result=[]
for y in ySet:
  innerResult=[]
  for x in xSet:
    innerResult.append(exp1)
  result.append(innerResult)

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

Ответы на вопрос(2)

Ваш ответ на вопрос