Я хочу зрозуміти розуміння вкладеного списку. Нижче я перерахував вираз для розуміння списку та їх еквівалент циклу for.
Цікаво, чи правильно я розумію це?
Наприклад,
[(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)
Я задав подібне запитання щодо еквівалента для виразу циклу для розуміння складного списку.
Наведені там відповіді реконструюють форму, зрозумівши, що вона робить внутрішньо.
Я хотів би знати, як це працює систематично, щоб я міг застосувати цю концепцію до інших дещо різних прикладів.
cols = zip(*rows)
, після чого ви могли б просто використовуватиmin(col)
іmax(col)
для кожного стовпця:[(min(c), max(c)) for c in cols]
. Або в одній короткій лінії:[(min(c), max(c)) for col in zip(*rows)]
.