Понимание понимания вложенного списка
Я хочу понять понимание вложенного списка. Ниже я перечислил выражение понимания списка и их эквивалент для цикла.
Интересно, правильно ли мое понимание этих вопросов?
Например,
[(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)
Я задал похожий вопросЭквивалент для циклического выражения для понимания сложного списка
Ответы, данные там, восстанавливают форму после понимания того, что она делает внутри.
Я хотел бы знать, как это работает систематически, чтобы я мог применить концепцию к другим слегка меняющимся примерам.