Довольно часто мы сталкиваемся с созданием списка посредством итераций по чему-либо, будь то строка или другой список. В конкретном случае отображения (описанном выше) мы создаем новый список, перебирая исходный список.
Примитивный код для этого создания иногда может быть многословным, хотя и понятным (например, для квадратов чисел):
Python:
somelist = [1,2,3,4,5,6,7,8,9]
newlist = []
for i in somelist:
newlist.append(i**2)
Тот же самый код можно удобно записать в видео спискового включения (нам не нравится это название, поэтому отныне я буду называть их «компрехами»):
Python:
somelist = [1,2,3,4,5,6,7,8,9]
newlist = [i**2 for i in somelist]
Вы можете заметить, что наш примитивный код не так уж прост. Обычно мы выполняем как группировку, так и фильтрацию внутри цикла для перед добавлением элемента (например, новый список должен сохранять только квадраты четных чисел). В этом случае мы пишем что-то вроде:
Python:
somelist = [1,2,3,4,5,6,7,8,9]
newlist = []
for i in somelist:
if not i%2:
newlist.append(i**2)
Однако «comprehi» позволяет сделать это довольно лаконично:
Python:
somelist = [1,2,3,4,5,6,7,8,9]
newlist = [i for i in somelist if not i%2]
В общем случае, понятие «compreh» описывается следующим правилом (это также верно для генераторов, но о них мы говорим в других статьях):
Код:
[new_element for new_element in iterable if condition where the element's value is available]
В программируемых логических модулях также доступны вложенные циклы. Они за поворотом слева направо.
Например, чтобы разложить двумерный массив (матрицу) на одномерный, мы обычно пишем что-то вроде:
Python:
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
planar = []
for i in matrix:
for j in i:
planar.append(j)
В результате будет получен одномерный (плоский) массив [1,2,3,4,5,6,7,8,9,10,11,12]
Тот же код на Comprex:
Python:
матрица = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
планар = [j для i в матрице для j в i]
Стоит отметить, что условие по-прежнему записывается в конце, ведь циклы для того, чтобы вложить друг в друга. Все итераторы, обрабатываемые в данный момент циклами, доступны в фундаменте.
[/LIKES]